1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

operator+ in derived classes More options

Discussion in 'C++' started by JimLangston, Mar 30, 2007.

  1. JimLangston

    JimLangston New Member

    Mar 30, 2007
    Likes Received:
    Trophy Points:
    This is something someone was asking in irc. I really don't need to do this
    right now, but may have to in the future. The following code is in error
    #include <iostream> 
    #include <string> 
    class Base 
        Base( const int x = 0): x_( x ) {} 
        Base operator+( const Base b ) { Base Temp( x_ ); Temp.x_ += b.x_; 
    return Temp; } 
        int X() { return x_; } 
        virtual ~Base() {} 
        int x_; 
    class Derived: public Base 
        Derived( const int x = 0, const int y = 0): Base( x ), y_( y ) {} 
        int Y() { return y_; } 
        int y_; 
    int main() 
        Base MyBase(10); 
        std::cout << MyBase.X() << "\n"; 
        Base MyBase2 = MyBase + Base(5); 
        std::cout << MyBase2.X() << "\n"; 
        Derived MyDerived( 10, 20 ); 
        std::cout << MyDerived.X() << " " << MyDerived.Y() << "\n"; 
        Derived MyDerived2 = MyDerived + Derived( 5, 10 ); 
        // Following line gives compilation error 
        std::cout << MyDerived.X() << " " << MyDerived.Y() << "\n"; 
       //  error C2440: 'initializing' : cannot convert from 'Base' to 'Derived' 
       //      No constructor could take the source type, or constructor 
    overload resolution was ambiguous 
        std::string wait; 
        std::getline( std::cin, wait ); 
    I understand the error. I am tryign to operator+ on derived, but the only operator + is on base.

    How do people handle this?

    What would be a nice solution, if possible, is to have a derived operator+ that calls the base operator+ for the addition of the x_'s, then add the y_'s in derived operator+ and return derived. I couldn't come up with a way to do this however, and think I would have to totally rewrite the operator+ for derived. In this case it's trivial, but I could see a complex class where it wouldn't be so trivial.

    Any thoughts?

Share This Page