换个方式问,这样描述清晰点解决方案
换个方式问,这样描述清晰点
有如下调用过程:
1、
A *pA = new A();
构造函数A()里调用了Init1()函数,该函数定义如下:
2、
void A::Init1()
{
B* pB = new B();
pB-> Init2();
}
3、
其中的Init2函数为:
void B::Init2()
{
C::Init3();
}
其中C::Init3()函数定义如下:
4、
BOOL C::Init3()
{
//这个函数里用到了this指针,那么这个this指针是哪个对象指针传进来的?
}
注:其中,B是从C派生的
------解决方案--------------------
那个this是指向一个B类对象的。因为“C::Init3”前面的“C::”只是明确限定执行C::Init3里的代码(即使B中有的override时亦如此),但时它并不能凭空产生出新的对象。
你也可以这样理解:除非是故意写恶意代码,否则this指针是一定指向某个对象的。
在你的程序中,没有看到哪里曾创建一个独立的C对象。那么肯定还有指向原来的B类对象,或者至少是一个跟原来的B对象有关的位置(比如存在多继承或虚拟继承时)。
------解决方案--------------------
B类对象的。
void A::Init1()
{
B* pB = new B();
pB-> Init2();
}
这里pB-> Init2(); 生成的是B类对象了
后面
void B::Init2()
{
C::Init3();
}
只是调用了B对象中的 C 子对象中的方法而已 ~
所以,this 还是 B类对象 的
有如下调用过程:
1、
A *pA = new A();
构造函数A()里调用了Init1()函数,该函数定义如下:
2、
void A::Init1()
{
B* pB = new B();
pB-> Init2();
}
3、
其中的Init2函数为:
void B::Init2()
{
C::Init3();
}
其中C::Init3()函数定义如下:
4、
BOOL C::Init3()
{
//这个函数里用到了this指针,那么这个this指针是哪个对象指针传进来的?
}
注:其中,B是从C派生的
------解决方案--------------------
那个this是指向一个B类对象的。因为“C::Init3”前面的“C::”只是明确限定执行C::Init3里的代码(即使B中有的override时亦如此),但时它并不能凭空产生出新的对象。
你也可以这样理解:除非是故意写恶意代码,否则this指针是一定指向某个对象的。
在你的程序中,没有看到哪里曾创建一个独立的C对象。那么肯定还有指向原来的B类对象,或者至少是一个跟原来的B对象有关的位置(比如存在多继承或虚拟继承时)。
------解决方案--------------------
B类对象的。
void A::Init1()
{
B* pB = new B();
pB-> Init2();
}
这里pB-> Init2(); 生成的是B类对象了
后面
void B::Init2()
{
C::Init3();
}
只是调用了B对象中的 C 子对象中的方法而已 ~
所以,this 还是 B类对象 的