一、对象不能直接调用虚函数
可以调用,但是体现不出来多态效果,可以从下面两个角度来理解
- 派生类对象是一个特殊的基类对象,派生类对象里面拥有一个基类对象实例。当把一个派生类对象赋值给基类对象时,是把派生类对象里面的基类对象对应的值赋值给新创建出来的对象。此时,通过基类对象调用的虚函数就是基类自己的虚函数
- 对象的类型来编译期已经决定,因此,在编译期具体要调用对应的哪个函数都已经决议好
class Base{
public:
virtual void func(){
cout << "I am Base" << endl;
}
};
class Derived : public Base{
public:
void func() {
cout << "I am Derived" << endl;
}
};
int main()
{
Derived dObj;
Base bObj = dObj;
bObj.func(); // I am Base
Base &obj = dObj;
obj.func(); // I am Derived
return 0;
}
文章解释了为什么派生类对象通过基类指针或引用调用虚函数才能体现多态性。当派生类对象赋值给基类对象时,实际上调用的是基类自身的虚函数,因为对象的类型在编译期已确定。然而,通过基类引用或指针,调用的虚函数会根据运行时的对象类型决定,这就是多态的体现。
11万+

被折叠的 条评论
为什么被折叠?



