问:构造函数中调用虚函数能否实现多态?
#include <iostream>
using namespace std;
class Parent
{
public:
Parent(int a = 0)
{
this->a = a;
print();
}
virtual void print()
{
cout<<"Parent1"<<endl;
}
virtual void print2()
{
cout<<"Parent2"<<endl;
}
protected:
private:
int a;
};
class Child :public Parent
{
public:
Child(int b = 0):Parent(2)
{
this->b = b;
print();
}
void print()
{
cout<<"Child1"<<endl;
}
void print2()
{
cout<<"Child2"<<endl;
}
protected:
private:
int b;
};
void howToPrint(Parent *p)
{
p->print();
}
int main()
{
Child c;
<pre name="code" class="cpp"> howToPrint(&c);
system("pause");return 0;}
对象中的VPTR指针什么时候被初始化?
1. 对象在创建的时,由编译器对VPTR指针进行初始化
2.只有当对象的构造完全结束后VPTR的指向才最终确定:
父类对象的VPTR指向父类虚函数表
子类对象的VPTR指向子类虚函数表