您的位置:首页 > 其它

vptr指针的分部初始化

2018-01-14 18:10 190 查看
//#include "stdafx.h"
#include <iostream>

using namespace std;

class Animal
{
public:
Animal(string _name) :name(_name)
{
test();                                             //执行哪个函数?
}
virtual void test()
{
cout << "父类test函数调用" << endl;
}
virtual ~Animal() { cout << "~Animal" << endl; }
protected:
string name;
};

class Mouse : public Animal
{
public:
Mouse(string _name, bool _sex) : Animal(_name), sex(_sex) {}
virtual void test()
{
cout << "子类test函数调用" << endl;
}
virtual ~Mouse() { cout << "~Mouse" << endl; }
protected:
bool sex;
};

void Pause()
{
Mouse m("Aem", 2);
}

int main()
{
Pause();

system("pause");
return 0;
}

/*
虽然在定义子类对象,但仍执行父类的test()函数,
执行父类构造函数时,vptr指针指向父类虚函数表,
执行子类构造函数时,vptr指针指向子类虚函数表,

对象在创建的时,由编译器对VPTR指针进行初始化
只有当对象的构造完全结束后VPTR的指向才最终确定
父类对象的VPTR指向父类虚函数表
子类对象的VPTR指向子类虚函数表
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: