Few Basic Questions in Overriding
- by Dahlia
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!