Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Homework Help: C++ class function

  1. Feb 12, 2010 #1
    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 (Text):
    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
        return 0;
    Here's the Class:

    Code (Text):
    class Complex
            Complex(int , int );
            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.
  2. jcsd
  3. Feb 12, 2010 #2


    User Avatar
    Science Advisor
    Homework Helper

    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
  4. Feb 12, 2010 #3

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    The problem is here:
    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 (Text):
    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.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook