类继承问题

Cform 2003-09-29 10:45:28
Class X
{protected:
int a;
}
Class Y
{public:
void set(X x,int c)
{x.a=c;}
}
看到书的问题答案还是有些不明白说是x.a不能用???
可否请用例子明示?

谢谢
...全文
33 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
aflyinghorse 2003-09-29
  • 打赏
  • 举报
回复
这样是可以的
class Y: public X
{public:
void set (int c)
{a=c;}
}
;
ssbull 2003-09-29
  • 打赏
  • 举报
回复
楼上几位说得对,你的X和Y之间没有继承关系。
如果class Y:public X {
public:
void set(X x,int c)
{x.a=c;}
};
就算这样,x.a=c也不对,因为自类不能直接用另一个几类对象的private成员,你应该在class X中定一个函数seta(),在class Y中,int set(X x,int c)改成:{x.seta()=a}
Cform 2003-09-29
  • 打赏
  • 举报
回复
代码写错了请见谅,
Class X{protected: int a;};
Class Y: public X
{public:
void set (X x, int c)
{x.a=c;}
}
;
ninesong 2003-09-29
  • 打赏
  • 举报
回复
因为Y没有从X上继承所以X,Y不存在父子关系。

你的
Y y
y.set(X … ,int …)可以在X中使用,因为它是public:

X x
x.a=c
不可以因为X中的a是protected。

lth_81 2003-09-29
  • 打赏
  • 举报
回复
。。。。。。。。。

protect只有在本身和继承的子类中才会暴露出来。因此,你传入X的对象x,并且用x.a是完全错误的。

^_^
csdn5211 2003-09-29
  • 打赏
  • 举报
回复
请楼主把代码写全
Jinhao 2003-09-29
  • 打赏
  • 举报
回复
首先,你的Y比不是继承于X,如果要继承于X 要写成这样

class Y:protected X
{public:
void set(X x,int c)
{x.a=c;}
}
sevecol 2003-09-29
  • 打赏
  • 举报
回复
你的X.a是protected.也就是说只有在X的派生类中才能是看的见的

而你的Y和X没有关系,所以在这里是不能访问的
andyforever 2003-09-29
  • 打赏
  • 举报
回复
是一个访问控制的问题
一共有三种
public对所有对象可见
protected仅对其派生类可见
private仅对其本身可见
另外可以申明友元,打破访问控制
在以上说明范围外的地方使用一个类的成员就是错误的
原因就是没有访问权限

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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