Comp Sci Fixing C++ Class Function for Complex Numbers

AI Thread Summary
The discussion focuses on a C++ class designed to handle complex number operations, specifically the addition method that fails to return the correct values. The issue arises because the method returns a local object that goes out of scope, leading to undefined behavior. A suggested solution is to return a pointer to a dynamically allocated Complex object instead of a local instance. Alternatively, the method can be modified to accept a reference to a Complex object as an argument to store the result directly. Properly managing object lifetimes is crucial for ensuring the expected output in C++.
jersiq1
Messages
7
Reaction score
0
For one of my assignments, I have to write a program to add or subtract complex numbers. I wrote a class, and the problem I am having is that one of my methods isn't returning the data to the calling object. I am going to omit the things in my code that I don't think are pertinent.

Code:
int main()
{
	Complex num1(2,5),num2(7,8),num3,num4; 

	num3.add(num1,num2); //this is the function that isn't working as expected
	num3.print(); //I am not getting the proper output here. Just the values of the default constructor
	
cin.get();
	return 0;
}

Here's the Class:

Code:
class Complex 
{
public:
		Complex();
		Complex(int , int );
		~Complex();
		Complex add(Complex &,Complex &);
		Complex sub(Complex &,Complex &);
		void print();

private: //data accessed by public functions
	int real;
	int imaginary;
};

Complex Complex::add(Complex & c1, Complex & c2) 
{
	Complex added_numbers;
	added_numbers.real = c2.real+ c1.real;
	added_numbers.imaginary = c2.imaginary + c1.imaginary;
	added_numbers.print(); //I added this to make sure the addition was occurring
	return added_numbers;	
}
}

I added the print function within the add function just to make sure it was adding, and it is. However, it isn't returning the values of added_numbers. I guess I am just really failing to understand why.
 
Physics news on Phys.org
add() doesn't set the member values real and parts. it returns a new complex number object.

It would normally be a static function that you could call to create a complex object - a factory in pattern speak
 
The problem is here:
jersiq1 said:
Code:
Complex Complex::add(Complex & c1, Complex & c2) 
{
	Complex added_numbers;
	...
	return added_numbers;	
}
}

You are returning something that is going out of scope. In C/C++ parlance, this is "undefined behavior". Your program could make nasal demons fly out of the computer in response to this, but as far as the standards committee is concerned, the compiler would still be compliant. What you need to do is to create a new Complex number and return that.

Code:
Complex * Complex::add(Complex & c1, Complex & c2) 
	Complex * added_numbers = new Complex;
	...
	return added_numbers;	
}

Alternately, pass the number that will contain the result as an argument.
 

Similar threads

Replies
15
Views
2K
Replies
7
Views
3K
Replies
15
Views
2K
Replies
2
Views
2K
Replies
2
Views
2K
Replies
1
Views
2K
Replies
1
Views
1K
Replies
5
Views
3K
Back
Top