| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 612 人关注过本帖
标题:关于一个继承的问题~间接调用类的私有成员问题
只看楼主 加入收藏
jackie1918
Rank: 2
等 级:论坛游民
帖 子:15
专家分:72
注 册:2009-7-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
关于一个继承的问题~间接调用类的私有成员问题
#include<iostream>
using namespace std;
class A{
public:
void dump()const{....}
protected:
void get_x(){x++;}
private:
int x;
};
class B:public A
{
public:
void get(){ get_x();}
/* void get_y(){ y=x;} */
void compare(A &a){ a.get_x();}
protected:
void set(){...}
private:
int y;
};
int main()
{
  B b;
  A a;
/* b.get_y(); */ //wrong! x在B类不可见,不能访问.
b.get();//ok! 由于x是私有的,所以派生类不可见,但能间接访问.

/* (a); */  //wrong!这个是我之前一直没想通的,但是现在清楚了。因为对象a调用的get_x()权限仅属于A,所以对B不可见。

return 0;
}

我在其他地方看的这么个例子~~~虽说明白继承的几种方式,但红色部分b.get; 和(a); 都调用了A类中的函数和私有成员变量,但为什么b.get();可以(属于间接调用A类中的私有成员??),而后者不可以呢。是以为后面用到的是A类对象的缘故吗?
初学菜鸟求教~~
搜索更多相关主题的帖子: 继承 
2009-07-14 16:02
jackie1918
Rank: 2
等 级:论坛游民
帖 子:15
专家分:72
注 册:2009-7-14
收藏
得分:0 
自己做沙发,在线等~~~
2009-07-14 17:29
niuyufeng
Rank: 2
等 级:论坛游民
帖 子:12
专家分:85
注 册:2009-7-17
收藏
得分:0 
重点在于  B::get() 调用的是属于自己的函数 get_x().   
B::void compare(A &a) 中要求调用的是另外一个A的保护函数,自然是不允许的
2009-07-17 08:18
jackie1918
Rank: 2
等 级:论坛游民
帖 子:15
专家分:72
注 册:2009-7-14
收藏
得分:0 
虽然A类中的get_x().  是个保护函数protected而不是private,所以它的访问权限是本类和它的子类啊~~~它仅对类外部是禁止访问的而已,而对于子类B来说应该是可以调用的吧???
2009-07-17 16:44
niuyufeng
Rank: 2
等 级:论坛游民
帖 子:12
专家分:85
注 册:2009-7-17
收藏
得分:20 
类(class) 和 实例(instance) 的关系
类是一个概念,比如 人
而 实例 是一个具体的对象,如同 你 我是一个具体的人
而protect 是以实例来讲的. 在自身的实例内可以被子类访问, 但仅局限在此实例之内.
不会因为访问者是什么样的类来确认可以访问或不能访问
表达能力有限 见谅
2009-07-17 22:25
jackie1918
Rank: 2
等 级:论坛游民
帖 子:15
专家分:72
注 册:2009-7-14
收藏
得分:0 
哦,有些明白了,还得好好看看这些细节了~~谢谢
2009-07-17 23:03
blueskiner
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:227
专家分:707
注 册:2008-9-22
收藏
得分:0 
定义一个类,里面的操作和数据都相对于这个类的实例的,就是说,你可以通过这个类来调用这些方法和存取这个类的数据
2009-07-21 07:24
快速回复:关于一个继承的问题~间接调用类的私有成员问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017965 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved