首先,上代码(仍是代码引起的血案)ide
class A { public: A(){ this; print(); } virtual void print(){ this; cout<<"A"<<endl; } void think(){ this; print(); } virtual ~A(){} private: }; class B:public A { public: B(int temp):A(),x(temp) { } virtual void print() override { this; cout<<"B"<<endl; } virtual ~ B(){} private: int x; };
B b(3);
b.think();函数
输出的结果:this
A指针
B对象
为何会出现这种状况呢?blog
由于子类并不继承父类的构造函数和析构函数!!!继承
相反会继承成员函数和虚函数,作用域
在执行子类的构造函数时,会调用父类的构造函数,记住,是调用,也就是A::A(),这样一来,是进入了A类的做用域,this指针也就是A类对象的this指针class
而执行成员函数时,由于继承的关系,因此一直处于子类的做用域,构造函数
记住,只要是子类继承父类,除了构造函数和析构函数以外,根本不存在父类的做用域,this指针所有都是子类对象的指针!!!!