С++ Ловля ошибок и комплексные числа

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Helly
Сообщения: 2
Зарегистрирован: 22 сен 2013, 12:35

Добрый день! Уважаемые программисты, помогите, пожалуйста, решить задачу по программированию на С++ (среда Visual C++ 2012).

Текст задания:

Реализуйте функцию ввода комплексных чисел с консоли. Обоснуйте и реализуйте для этой функции не менее трёх различных стратегий обработки возможных ошибок времени исполнения.

Мои наработки:

Код: Выделить всё

#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;

class Complex
{
private:
	double re;
    double im;
public:
	Complex()
		{
			re = 0;
			im = 0;
	} 
    Complex(const Complex& temp)
		{
			re = temp.re;
			im = temp.im;
	}
    Complex(double _re, double _im)
		{
			re = _re;
			im = _im;
	}
	Complex vvod (Complex _re, Complex _im)
	{
		cout<<"Vvedite re: "<<endl;
		cin>>_re.re;
		cout<<"Vvedite im: "<<endl;
		cin>>_im.im;
		cout<<"Complex: "<<re<<"+"<<im<<"i"<<endl;
	}

    ~Complex();
};

int main()
{
	double a;
	double b;
	vvod (a, b);
	return 0;
}
С ловлей ошибок я постараюсь сама разобраться, помогите, пожалуйста, на этом этапе. Что я делаю не так?
Helly
Сообщения: 2
Зарегистрирован: 22 сен 2013, 12:35

Немного доработала, теперь мой код выглядит так. Скажите, пожалуйста, функция vvod что должна возвращать?

Код: Выделить всё

#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;

class Complex
{
private:
	double re;
    double im;
public:
	Complex()
		{
			re = 0;
			im = 0;
	} 
    Complex(const Complex& temp)
		{
			re = temp.re;
			im = temp.im;
	}
    Complex(double _re, double _im)
		{
			re = _re;
			im = _im;
	}
	Complex vvod (Complex _re, Complex _im)
	{
		cout<<"Vvedite re: "<<endl;
		cin>>_re.re;
		cout<<"Vvedite im: "<<endl;
		cin>>_im.im;
		cout<<"Complex: "<<re<<"+"<<im<<"i"<<endl;
		return ;
	}

    ~Complex();
};

int main()
{
	Complex a;
	Complex b;
	Complex com;
	com.vvod(a, b);

	system ("pause");
	return 0;
}

Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Функция должна создать новый экземпляр Complex и возвращать его (это было сделано правильно), а вот получать в качестве параметра она не должна ничего, так как все данные она берёт из стандартного ввода. Так же не следовало делать функцию vvod методом класса по той причине, что мы возвращаем новый экземпляр, а не модифицируем состояние самого объекта (иначе говоря this). Таким образом нам следует сделать функцию либо статическим методом класса, либо вообще вынести из класса и сделать обычной функцией. Вот так будет выглядеть последний вариант. Статическую функцию, того потребует задание, предлагаю осилить самостоятельно.

Код: Выделить всё

#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;

class Complex
{
private:
     double re;
     double im;
public:
     Complex()
     {
             re = 0;
             im = 0;
     } 
     Complex(const Complex& temp)
     {
             re = temp.re;
             im = temp.im;
     }
     Complex(double _re, double _im)
     {
             re = _re;
             im = _im;
     }

     ~Complex()
     {
     }
};

Complex vvod()
{
     double re = 0, im = 0;
     cout<<"Vvedite re: "<<endl;
     cin>>re;
     cout<<"Vvedite im: "<<endl;
     cin>>im;
     cout<<"Complex: "<<re<<"+"<<im<<"i"<<endl;
     return Complex(re, im);
}

int main()
{
     Complex a = vvod();

     system ("pause");
     return 0;
}
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить