找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1654|回复: 8

[求助]关于继承的问题

[复制链接]
发表于 2009-11-1 00:05:58 | 显示全部楼层 |阅读模式 IP:江苏扬州
#include<iostream.h>

class A
{
public:
int a;
};

class B:public A
{
public:
int b;
};

class C:public A
{
public:
int c;
};

class D:public B,public C
{
public:
int d;
};

void main()
{
A aa;
B bb,*pB;
C cc;
D dd;
aa.a=1;
bb.a=2;
cc.a=3;
pB=&dd;
cout<<bb.a<<'\n'
<<pB->a<<'\n'
<<dd.B::a<<'\n';
}

我是想用一个指向基类的指针指向派生类的对象来解决二义性问题

应该输出 2 2 2 阿

结果并不如此

高手指点一下~

谢过~
发表于 2009-11-1 00:05:59 | 显示全部楼层 IP:江苏扬州
你的程序并不存在二义性,因为对象dd的a并没有显式地赋值,所以是个无法确定的数
回复

使用道具 举报

发表于 2009-11-1 00:06:01 | 显示全部楼层 IP:江苏扬州
都是public数据成员,这样数据对派生类都是可见的,好像不能解决二义性,不知是不是这样,感觉数据成员为public违背了类设计封装性
回复

使用道具 举报

发表于 2009-11-1 00:06:02 | 显示全部楼层 IP:江苏扬州
以下是引用zcx8532在2005-11-9 21:53:18的发言:
你的程序并不存在二义性,因为对象dd的a并没有显式地赋值,所以是个无法确定的数
如果没有赋值的话不是应该继承基类的值么
回复

使用道具 举报

发表于 2009-11-1 00:06:04 | 显示全部楼层 IP:江苏扬州
以下是引用yamz_1983在2005-11-9 22:11:30的发言:

都是public数据成员,这样数据对派生类都是可见的,好像不能解决二义性,不知是不是这样,感觉数据成员为public违背了类设计封装性
跟public没关系拉
只是一个小程序方便解决问题用的
回复

使用道具 举报

发表于 2009-11-1 00:06:05 | 显示全部楼层 IP:江苏扬州
bb和dd是两个不同的对象,你只是把bb中的a赋值,而pb指针指向的是dd,而不是bb,也就是说dd中的bb部分的变量a还是没有被赋值
回复

使用道具 举报

发表于 2009-11-1 00:06:08 | 显示全部楼层 IP:江苏扬州
上面大哥说得很对!呵,支持一下,让我明白了一些我很久都不明白的问题,(我只会用虚基类的方法来防止二义性的发生 )
回复

使用道具 举报

发表于 2009-11-1 00:06:10 | 显示全部楼层 IP:江苏扬州
啊啊....改成用构造函数赋值就可以了~~
class A

{

public:

int a;
A(){a=1;}

};
这样就行~~
回复

使用道具 举报

发表于 2009-11-1 00:06:12 | 显示全部楼层 IP:江苏扬州
观点都被你们说了,我也没有什么说的了。看大家的发表还是学习了很多知识啊。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 17:22 , Processed in 0.224293 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表