返回信息流class A{
public:
A(){a = 1;}
/*virtual*/ void fun(){cout <<"A::fun()"<< endl;}
/*virtual*/ ~A(){cout <<"A::~A()"<< endl;}
int a;
};
class B{
public:
B(){b = 2;}
/*virtual*/ void fun(){cout <<"B::fun()"<< endl;}
/*virtual*/ ~B(){cout <<"B::~B()"<< endl;}
int b;
};
class C : /*virtual*/ public A, /*virtual*/ public B{
public:
C(){c = 3;}
/*virtual*/ void fun(){c = 4;cout <<"C::fun()"<< endl;}
/*virtual*/ ~C(){cout <<"C::~C()"<< endl;}
int c;
};
int main()
{
C c;
C *pc = &c;
pc->fun();
A *pa = &c;
pa->fun();
B *pb = &c;
pb->fun();
if (/*(void*)&c == (void*)(A*)&c*/pc==pa)
{
cout<<"pc"<<" "<<pc<<" pa "<<pa<<" pb "<<pb<<endl;
cout<<"hello"<<endl;
}
if (/*(void*)&c == (void*)(B*)&c*/pc==pb)
{
cout<<"world"<<endl;
}
return 0;
}
非虚继承虚函数时,每个基类调用自己的成员函数。
使用虚继承虚函数时,三个指针均调用派生类成员函数。
以上没有问题。
当if判断时,此程序将输出 hello 和world.奇怪的是pb不等于pa和pc。
当使用注释掉的表达方式时,只输出hello。
请达人解释下。
这是一条镜像帖。来源:北邮人论坛 / cpp / #38422同步于 2010/4/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
一个多继承的问题
dreams
2010/4/22镜像同步21 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
你好大牛,我水一帖
【 在 jmpesp (用猥亵的眼光看艺术) 的大作中提到: 】
: 呃 又是这些问题 貌似版上已经讨论很多了 可以搜索下版面
: ps. 像这些问题 其实只要反汇编下 立马看的清清楚楚。。。
不会汇编
【 在 jmpesp (用猥亵的眼光看艺术) 的大作中提到: 】
: 呃 又是这些问题 貌似版上已经讨论很多了 可以搜索下版面
: ps. 像这些问题 其实只要反汇编下 立马看的清清楚楚。。。
水贴也要学汇编,一边学一遍水
不过这个问题问过的次数的确很多
【 在 zxsword (一切,一切都会变好的) 的大作中提到: 】
: ......其实,我也是来水贴的...
【 在 jmpesp 的大作中提到: 】
: 呃 又是这些问题 貌似版上已经讨论很多了 可以搜索下版面
: ps. 像这些问题 其实只要反汇编下 立马看的清清楚楚。。。
: --
: ...................
大牛头像都这么猛
问一下,你这个头像中的人物竞拍出价多少钱?或者你倒贴了?
【 在 jmpesp (用猥亵的眼光看艺术) 的大作中提到: 】
: 呃 又是这些问题 貌似版上已经讨论很多了 可以搜索下版面
: ps. 像这些问题 其实只要反汇编下 立马看的清清楚楚。。。