#include
using namespace std;
class animal
{
public:
int return_number()
{
return 88;
}
int m_age = 33;
};
class person : public animal
{
public:
person(int egg)
{
m_age = egg;
}
int return_number()
{
return 66;
}
};
int main()
{
person p(10000);
animal & ani = p;
cout << ani.return_number() << endl;
cout << ani.m_age << endl;
system(“pause”);
return 0;
}
如上所示,
多态的三个条件:继承、父类指针或引用指向子类对象、子类重写父类虚函数,并没有全部实现,所以没有发生多态。
cout << ani.return_number() << endl;
cout << ani.m_age << endl;
第一行没有发生多态,所以输出的是父类的函数,结果是88
第二行要求输出的是成员属性,因为父类引用指向了子类对象,输出的实际是子类的成员属性。
所以可以判断,如果父类指针指向了子类对象,并且满足多态的条件,那么将会执行子类的虚函数。但是,成员属性的执行与多态无关,只要父类指针指向了子类对象,那么就会输出子类的成员属性。