class B :virtual public A class C :virtual private A 结果会如何?

lx_cyh 2002-10-21 07:43:32
#include <iostream>
#include <string>
using namespace std;

class A {
public:
int x;
int y;
};
class B :virtual public A { int g;};
class C :virtual private A { };
class D : public B, public C{ };

int main()
{

cout << sizeof(A) << '\n' ;
cout << sizeof(B) << '\n' ;
cout << sizeof(C) << '\n' ;
cout << sizeof(D) << '\n' ;

return 0;
}

结果为8 16 12 20 我不明白的是对于类D来讲 x,y是怎么处理的
...全文
579 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lx_cyh 2002-11-10
  • 打赏
  • 举报
回复
to : Kaye(真是那个菜)
道理何在?逻辑上怎么讲
Kaye 2002-11-07
  • 打赏
  • 举报
回复
to lx_cyh(hi):
不是都说了吗?
存储结构不变(与普通的多继承相比),x,y都为public属性的

你还有什么意图?你晕,大家也都晕了,呵呵!
!@$##$^&^%^%&^%#@#
cwanter 2002-11-07
  • 打赏
  • 举报
回复
也要加个指针指向虚基类,全面了解建议看<<深度探索C++对象模型>>.
lx_cyh 2002-11-07
  • 打赏
  • 举报
回复
我问的意图不是很明显吗?虚基类不同派生方式表现如何,真晕,我实在不喜欢某些人的答非所问
cwanter 2002-11-06
  • 打赏
  • 举报
回复
都搞不懂你问什么了:)
LBN1012 2002-11-06
  • 打赏
  • 举报
回复
D公有继承了B,所以计算长度是B的成员在加一个指针的长度。又因为C私有继承了A,无论D怎么继承C,C中的成员都不可访问,所以只计算指向C指针的长度!!!!

继承方式 基类特性 派生类特性

public public
公有继承 protected protected
private 不可访问

public private
私有继承 protected private
private 不可访问

public protected
保护继承 protected protected
private 不可访问
coppermine 2002-11-06
  • 打赏
  • 举报
回复
look up the <Inside C++ Object Model>
lx_cyh 2002-11-06
  • 打赏
  • 举报
回复
天下之大,高手何在?
Microafang 2002-10-23
  • 打赏
  • 举报
回复
结果就是让你有点晕!!

学语言之大忌:编程语言理论化!
建议:编程语言的工具化!

还不如好好研究研究MFC的结构!
flyabovesun 2002-10-22
  • 打赏
  • 举报
回复
x, y 是从class B 中继承来的,由于C是private From A, D 不可能从C中继承x,y,这两个变量经过private 继承已经是private member of C. private member 是不可以继承的..
Kaye 2002-10-22
  • 打赏
  • 举报
回复
存储结构不变,x,y都为public属性的
lx_cyh 2002-10-22
  • 打赏
  • 举报
回复
注意:上面的回答解释不了下面的情况 class B :virtual private A class C :virtual private A 结果仍然一样
class A {
public:
int x;
int y;
};
class B :virtual private A{ int g;};
class C :virtual private A { };
class D : public B, public C{ };

int main()
{

cout << sizeof(A) << '\n' ;
cout << sizeof(B) << '\n' ;
cout << sizeof(C) << '\n' ;
cout << sizeof(D) << '\n' ;

return 0;
}


lx_cyh 2002-10-21
  • 打赏
  • 举报
回复
我问的是 class B :virtual public A class C :virtual private A
看清楚再回答
mr_oydy 2002-10-21
  • 打赏
  • 举报
回复
一个int为4个字节
A的结构如下:
{
x
y
} 共8个字节

B的结构如下:
{
A内的{
x
y
}
g
pA 一个指向A的指针占4个字节
}共16个字节

的结构如下:
C{
A内的{
x
y
}
pA 一个指向A的指针4个字节
}共12个字节

B的结构如下:
{
A内的{
x
y
}
g
pC 一个指向C的指针4个字节
pB 一个指向D的指针4个字节

}共20个字节
newgina 2002-10-21
  • 打赏
  • 举报
回复
因为c和b都有virtual public 所以就把c和b都继承a的重复部分去掉了

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧