【发布时间】:2011-02-16 03:12:40
【问题描述】:
如果两个方法都声明为虚拟方法,那么被调用的 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();
方法 1 基础
方法一推导
【问题讨论】:
-
"IF 这两个方法都被声明为虚拟的," - 在派生类中,覆盖无论如何都是虚拟的(尽管人们只是为了清楚起见更喜欢将它添加到那里),所以这与问题无关。
-
您正在寻找的演员应该是
((BaseClass&)myClass).Method1();,或者更多的 C++:static_cast<BaseClass&>(myClass).Method1(); -
另外,你应该避免使用 C 风格的演员表。
标签: c++ methods virtual-functions