读书人

很纠结的有关问题

发布时间: 2012-12-30 10:43:15 作者: rapoo

很纠结的问题
类的成员函数有一个this指针,指向调用它的对象。
那么子类对象初始化的时候会调用子类的构造函数,但是它会先调用父类的构造函数。
子类的构造函数中的this指针应该指向子类的数据类型,
那么我想问父类构造函数的this成员指向子类的数据类型还是父类的数据类型?
[解决办法]
class A
{
public:
A()
{
unsigned int temp = (unsigned int)this;
m_a = -1;
}
private:
int m_a;
};


class B:public A
{
public:
B()
{
m_a = 1;
}
private:
int m_a;
};

int main()
{
B TEST;
int fff = (int)&TEST;
return 0;
}

知道TEST的内存结构吗给你分析出来就一目了然
0x0012FF5C ff ff ff ff 01 00 00 00 cc cc cc cc b8 ff 12 00 ................
第一个为-1 ,第二个为1,所以是this的两个数据成员都属于对象,父类数据成员在前面,子类数据成员在后面
[解决办法]
不知道怎么描述,通俗的讲就是“父类的this指针指向子类中继承自父类的那一部分成员”
[解决办法]
类是对象的抽象,对象才有内存空间,类没有,记住这点你就不会有这个困惑了
[解决办法]
看来这个问题值得一说:指针是指向内存的地址,内存就好比一连串编了号的盒子,指针就是那个盒子的编号。因此指针本质是一样的,你问的问题:那么我想问父类构造函数的this成员指向子类的数据类型还是父类的数据类型?这个问题其实并不存在,他们指向同一个地方,当编译器调用父类的构造函数的时候,就将它转换成父类指针,调用子类的构造函数的时候,就将它转换成子类指针。指针的类型只有对编译器才有意义,它知道根据指针的类型具体调用某个适当的函数。--不知道说清楚了没。

读书人网 >C++

热点推荐