operator+ in derived classes More options

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

  1. JimLangston

    JimLangston New Member

    Joined:
    Mar 30, 2007
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    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
    (marked).
    Code:
    #include <iostream> 
    #include <string> 
    
    
    class Base 
    { 
    public: 
        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() {} 
    private: 
        int x_; 
    
    
    
    }; 
    
    
    class Derived: public Base 
    { 
    public: 
        Derived( const int x = 0, const int y = 0): Base( x ), y_( y ) {} 
        int Y() { return y_; } 
    private: 
        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

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice