一、对象不能直接调用虚函数
可以调用,但是体现不出来多态效果,可以从下面两个角度来理解
- 派生类对象是一个特殊的基类对象,派生类对象里面拥有一个基类对象实例。当把一个派生类对象赋值给基类对象时,是把派生类对象里面的基类对象对应的值赋值给新创建出来的对象。此时,通过基类对象调用的虚函数就是基类自己的虚函数
- 对象的类型来编译期已经决定,因此,在编译期具体要调用对应的哪个函数都已经决议好
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;
}