Страница 1 из 1

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

Добавлено: 22 сен 2013, 13:01
Helly
Добрый день! Уважаемые программисты, помогите, пожалуйста, решить задачу по программированию на С++ (среда 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;
}
С ловлей ошибок я постараюсь сама разобраться, помогите, пожалуйста, на этом этапе. Что я делаю не так?

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

Добавлено: 22 сен 2013, 13:40
Helly
Немного доработала, теперь мой код выглядит так. Скажите, пожалуйста, функция 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;
}


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

Добавлено: 30 сен 2013, 19:00
Romeo
Функция должна создать новый экземпляр 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;
}