Few Basic Questions in Overriding

Posted by Dahlia on Stack Overflow See other posts from Stack Overflow or by Dahlia
Published on 2010-05-26T03:02:48Z Indexed on 2010/05/26 3:11 UTC
Read the original article Hit count: 246

I have few problems with my basic and would be thankful if someone can clear this.

  • What does it mean when I say base *b = new derived; Why would one go for this? We very well separately can create objects for class base and class derived and then call the functions accordingly. I know that this base *b = new derived; is called as Object Slicing but why and when would one go for this? I know why it is not advisable to convert the base class object to derived class object (because base class is not aware of the derived class members and methods). I even read in other StackOverflow threads that if this is gonna be the case then we have to change/re-visit our design. I understand all that, however, I am just curious, Is there any way to do this?

    class base
    {
    public:
        void f(){cout << "In Base";}
    };
    
    
    class derived:public base
    {
    public:
        void f(){cout << "In Derived";}
    };
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        base b1, b2;
        derived d1, d2;
        b2 = d1;
        d2 = reinterpret_cast<derived*>(b1); //gives error C2440
        b1.f(); // Prints In Base
        d1.f(); // Prints In Derived
        b2.f(); // Prints In Base
        d1.base::f(); //Prints In Base
        d2.f();
        getch();
        return 0;
    }
    
    • In case of my above example, is there any way I could call the base class f() using derived class object? I used d1.base()::f() I just want to know if there any way without using scope resolution operator?

Thanks a lot for your time in helping me out!

© Stack Overflow or respective owner

Related posts about c++

Related posts about polymorphism