如果两种方法都被声明为虚拟的,那么被调用的Method1()的两个实例都不应该是派生类的Method1()?关于虚拟方法的问题
我看到BASE然后派生每次调用。我正在为面试做一些评估,我想确保我有这个直接。的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();
方法1个BASE
方法1 DERVIED
“如果两种方法都被声明为虚拟的,” - 派生类中的覆盖是虚拟的(尽管人们只是为了清晰起见而将它添加),所以这与问题无关。 – UncleBens 2010-05-05 21:11:26
你正在寻找的演员将是'((BaseClass&)myClass)。Method1();',或者多一点C++:'static_cast(myClass).Method1();' –
GManNickG
2010-05-05 21:14:24
另外,你应该避免使用C风格的类型转换。 – rlbond 2010-05-05 21:14:26