关于继承的访问问题!

macadam 2003-10-09 10:32:57
class A
{
...
...
int var;
};

class B : public A
{
friend class C;
...
...
};

class C
{
...
...
inline void Fun();
};

inline void C::Fun()
{
var=0;
...
...
}

请教各位:
在class C中的函数Fun()是否可以访问class A中的private数据成员var?
...全文
31 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
stickforme 2003-10-10
  • 打赏
  • 举报
回复
不能
class C{}只能访问class B{}中的Fun{}
bbkliuxf 2003-10-10
  • 打赏
  • 举报
回复
"在类A中,如果var是私有数据成员,那么它不能被任何派生类访问。"
这句话才是关键!!!!!!当然不行了
Wolf0403 2003-10-10
  • 打赏
  • 举报
回复
楼主:
to xueweizhong(薛卫忠):

inline void C::Fun()
{
B.var=0;
...
...
}

改成这样可不可以“B.var=0;”?
==========================================
var 不是 static,不能用 B.var 形式访问。
xueweizhong 2003-10-09
  • 打赏
  • 举报
回复
OK
macadam 2003-10-09
  • 打赏
  • 举报
回复
to xueweizhong(薛卫忠):

inline void C::Fun()
{
B.var=0;
...
...
}

改成这样可不可以“B.var=0;”?
macadam 2003-10-09
  • 打赏
  • 举报
回复
to xueweizhong(薛卫忠)

明白!
xueweizhong 2003-10-09
  • 打赏
  • 举报
回复
----------------------------------------------------------
情形1:
class A
{
private:
int var;
};

这时B也不能看到父类的私有成员var,当然B's friend C也看不到。


----------------------------------------------------------
情形2:
class A
{
protected:
int var;
};
这时B能看到父类的保护成员var, var作为B的保护成员(public 继承)
这时
(1)如果var作为A的成员访问,由于C is not A's friend,
C::Fun()不能访问 var
这段程序编译错误:
void C::Fun()
{
A a;
a.var; // access denied
}
(2) 如果var作为B的成员访问,由于C is B's friend
and var is B's protected member inherited
from A
所以这段程序是合法的:
void C::Fun()
{
B b;
b.var; // access approved. OK.
}

----------------------------------------------------------
to micropentium6(小笨)
>我认为不行,道理嘛,你儿子的朋友不一定是你爸爸的朋友

这句话说得太草率,有点误人子弟的意思。

----------------------------------------------------------
  • 打赏
  • 举报
回复
我认为不行,道理嘛,你儿子的朋友不一定是你爸爸的朋友
quickball 2003-10-09
  • 打赏
  • 举报
回复
不可以
在类A中,如果var是私有数据成员,那么它不能被任何派生类访问。
vsfan 2003-10-09
  • 打赏
  • 举报
回复
简单说来,友元不能被继承
sharkhuang 2003-10-09
  • 打赏
  • 举报
回复
不能!!明确说明了friend不能继承找个特性!
你现在B中没有VAR,所以会出错哦!


我才学C++几天!不知道对不对!
panzhaoping 2003-10-09
  • 打赏
  • 举报
回复
如果要访问,可以定义一些接口,将private中的东西暴露出来
记住,给接口的要是const不要让用户修改了你的private指

64,654

社区成员

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

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