bob*_*205 4 c++ methods virtual-functions
如果两个方法都声明为虚拟,那么被调用的Method1()的两个实例都不应该是派生类的Method1()吗?
我看到BASE然后每次调用DERIVED.我正在为面试做一些评论,我想确保我有这个直接.的xD
class BaseClass
{
public:
virtual void Method1() { cout << "Method 1 BASE" << endl; }
};
class DerClass: public BaseClass
{
public:
virtual void Method1() { cout << "Method 1 DERVIED" << endl; }
};
DerClass myClass;
((BaseClass)myClass).Method1();
myClass.Method1();
Run Code Online (Sandbox Code Playgroud)
方法1 BASE
方法1 DERVIED
CB *_*ley 14
不,"C风格"演员通过切片 myClass ((BaseClass)myClass)创建一个临时BaseClass对象.它的动态类型是,它根本不是所以被调用的是基类方法.BaseClassDerClassMethod1
myClass.Method1()是一个直接的电话.作为myClass一个对象,而不是引用,没有虚拟分派(没有必要).
因为((BaseClass)myClass)强制转换将myClass对象切割DerClass为BaseClass,所以只调用了它BaseClass的实现Method1().
要使多态性正常工作,必须通过指针调用方法:
DerClass myClass;
BaseClass* ptrToMyClass = &myClass;
ptrToMyClass->Method1(); // Calls the DerClass implementation of Method1()
Run Code Online (Sandbox Code Playgroud)
或参考:
DerClass myClass;
BaseClass& refToMyClass = myClass;
refToMyClass.Method1(); // Calls the DerClass implementation of Method1()
Run Code Online (Sandbox Code Playgroud)