//#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指向子类虚函数表
*/
vptr指针的分部初始化
最新推荐文章于 2021-12-25 13:56:31 发布