1、父类中的this不一定是指向父类对象,也可能指向的是子类对象。
2、当父类初始化自己的对象时,其中的this是指父类对象本身。
3、当子类继承父类时,子类初始化自己的对象,会调用父类的构造函数,此时父类构造函数的this指的是子类对象,而不是父类对象。下面的代码可以说明一切。
#include <iostream>
class AA
{
public:
int a ;
static AA *pA ;
public:
AA(int a )
{
this->a = a;
pA = this;//当子类对象初始化的时候,此时的this指的是子类对象。
}
virtual void print()
{
std::cout<<"AA print.\n";
}
};
AA* AA::pA = NULL;//类的静态成员变量要在类的外面赋值。
//语法:类型 域作用符::变量名 = 值
class BB:public AA
{
public:
BB():AA(2)
{
}
void print()
{
std::cout<<"BB print.\n";
}
private:
};
void main()
{
//BB b;
//b.print();
两者地址相同,说明pA指向的是子类对象
//std::cout<<&b<<std::endl;
//std::cout<<AA::pA<<std::endl;
//AA::pA->print();//因为父类的print()是虚函数,如果父类指针指向的是子类对象的话,则会调用子类中的print()函数,事实上调用的的确是子类中的print函数,所以pA指向的是子类对象。
AA a(1);
std::cout<<&a<<std::endl;
std::cout<<AA::pA<<std::endl;
system("pause");
}