问一个this指针的有关问题,迷惑!
问一个this指针的问题,迷惑!!
情况:
class A
{
Create(this)
{......}
}
class B : Public A
{
Fun()
{
A::Create(this);//B在此调用基类A的这个函数.
}
}
那么,我在另一个模块C中:
B b;
b.Fun();
问题是:在Fun()中调用的A::Create(this)中传进去的this指针到底是不是指向B对象的指针呢??还是一个指向A对象的??迷惑!!
------解决方案--------------------
你是不是想写一个builder?
你的定义写的也有问题
class A
{
static void Create(A*)
{......}
void Create(void)
{总是修改自己还传什么this指针?}
}
class B : Public A
{
Fun()
{
A::Create(this);//B在此调用基类A的这个函数.
}
}
objb.Fun()的话传入的是objb,但是会被隐式转化为一个A的指针
------解决方案--------------------
派生类直接调用基类的这个函数,执行的是基类的函数。
如果想让基类的指针调用子类的函数,请用虚函数
------解决方案--------------------
没太看懂你为什么要用this指针做参数
但是下面几点是肯定的
1. 编译器会根据函数原型做一定的cast,所以最终真正压栈的并不一定是你看到的this指针
2.
B::Fun()
{
A::Create(this);//B在此调用基类A的这个函数.
}
在调用A::Create()前会对ECX做运算,最后放入ECX的实际是A的指针
情况:
class A
{
Create(this)
{......}
}
class B : Public A
{
Fun()
{
A::Create(this);//B在此调用基类A的这个函数.
}
}
那么,我在另一个模块C中:
B b;
b.Fun();
问题是:在Fun()中调用的A::Create(this)中传进去的this指针到底是不是指向B对象的指针呢??还是一个指向A对象的??迷惑!!
------解决方案--------------------
你是不是想写一个builder?
你的定义写的也有问题
class A
{
static void Create(A*)
{......}
void Create(void)
{总是修改自己还传什么this指针?}
}
class B : Public A
{
Fun()
{
A::Create(this);//B在此调用基类A的这个函数.
}
}
objb.Fun()的话传入的是objb,但是会被隐式转化为一个A的指针
------解决方案--------------------
派生类直接调用基类的这个函数,执行的是基类的函数。
如果想让基类的指针调用子类的函数,请用虚函数
------解决方案--------------------
没太看懂你为什么要用this指针做参数
但是下面几点是肯定的
1. 编译器会根据函数原型做一定的cast,所以最终真正压栈的并不一定是你看到的this指针
2.
B::Fun()
{
A::Create(this);//B在此调用基类A的这个函数.
}
在调用A::Create()前会对ECX做运算,最后放入ECX的实际是A的指针