多重继承时,子类实例调用不同父类的虚函数时,传入的this是一个东西吗?该怎么处理
多重继承时,子类实例调用不同父类的虚函数时,传入的this是一个东西吗?
class B{
public:
void BB(){
cout<<"this's address in BB:"<<(int)this<<endl;
};
};
class A{
public:
void AA(){
cout<<"this's address in AA:"<<(int)this<<endl;
};
};
class C:public A, public B
{
};
void main()
{
C c;
c.AA();
c.BB();
}
打印出来的地址是不一样的。
------解决方案--------------------
this当然不一样。
C包含A和B.
所以
c.AA(); this指针被调整到A的部分。
c.BB(); this指针被调整到B的部分。
你可以继续给C搞一个CC()然后输出this
你会发现
c.CC(); 的this指针可能会和AA或BB输出一样的值,也可能不一样。
------解决方案--------------------
当然是不一样的了 这两个this不是继承类C的,而是基类A跟B的。。。
------解决方案--------------------
不一样的,编译器会自动调整
AA() 需要的是一个 A*
BB() 需要的是一个 B*
所以相当于把 C* 专成 A* 作为this调用 AA
BB同理
class B{
public:
void BB(){
cout<<"this's address in BB:"<<(int)this<<endl;
};
};
class A{
public:
void AA(){
cout<<"this's address in AA:"<<(int)this<<endl;
};
};
class C:public A, public B
{
};
void main()
{
C c;
c.AA();
c.BB();
}
打印出来的地址是不一样的。
------解决方案--------------------
this当然不一样。
C包含A和B.
所以
c.AA(); this指针被调整到A的部分。
c.BB(); this指针被调整到B的部分。
你可以继续给C搞一个CC()然后输出this
你会发现
c.CC(); 的this指针可能会和AA或BB输出一样的值,也可能不一样。
------解决方案--------------------
当然是不一样的了 这两个this不是继承类C的,而是基类A跟B的。。。
------解决方案--------------------
不一样的,编译器会自动调整
AA() 需要的是一个 A*
BB() 需要的是一个 B*
所以相当于把 C* 专成 A* 作为this调用 AA
BB同理