1. 事情的由来
最近在分析cocos2d-x启动代码的时候,不小心看到单例的程序
//定义一个app对象 AppDelegate app; //执行app对象的run函数。进入帧循环 Application::getInstance()->run();
AppDelegate 是Application的子类,AppDelegate 是一个单例的模式,但是通过父类Application::getInstance()获取AppDelegate的单例指针,
父类怎么知道子类对象的指针呢?原来是在Application的构造函数中通过this指针记录下来,但是在定义派生类对象的时候,
底层调用父类构造函数的时候,父类构造函数this指针就是执行派生类对象吗?我当时没反应回来,后来咀嚼几次终于想明白了。
class A { public: A(){} }; class B:public A { public: B(){} };
2. 结论
当我们在基类中使用this指针调用成员的时候,有什么不一样的地方呢?
主要是普通的同名成员和虚函数的时候不一样,直接上代码吧
#include<iostream> using namespace std; class A { public: A() { x = 10; } void testcallvalue() { //这里调用的是A中的x cout<<this->x<<endl; } void testcallvirtualfun() { //这里调用的是B中的vrfun函数 this->vrfun(); } void virtual vrfun(){ cout<<"A()"<<endl; } int x; }; class B:public A { public: B() { x = 20; } void virtual vrfun(){ cout<<"B()"<<endl; } int x; }; int main() { B myb; //======================================== //同名成员的测试 //直接通过对象调用里面的同名数据成员 cout<<myb.x<<endl;//20 这里调用的是B中定义的x //直接通过对象调用里面的同名数据成员 myb.testcallvalue();//10 //======================================== myb.testcallvirtualfun();//B() }