| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5308 人关注过本帖, 4 人收藏
标题:[原创]学习继承的一些总结
只看楼主 加入收藏
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
结帖率:33.33%
收藏(4)
 问题点数:0 回复次数:20 
[原创]学习继承的一些总结

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: 中学者
*/ 时间: 2007-10-5 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------


作为新手,想必可能有和我遇到同样问题的。希望这篇文章对大家有帮助,也希望这篇文章大家能对我有帮助。学习继承,我主要总结了关于成员可见性的问题。。

作为继承,主要有三种:公有继承,私有继承(默认继承方式),保护继承。
公有继承:
基类中的公有成员在派生类中仍公有;
基类中的保护成员在派生类中仍保护;
基类中的私有成员在派生类中不可见,仅基类可见。

私有继承:
基类中的公有成员在派生类中为私有;
基类中的保护成员在派生类中为私有;
基类中的私有成员在派生类中不可见,仅基类可见。

保护继承:
基类中的公有成员在派生类中为保护;
基类中的保护成员在派生类中为保护;
基类中的私有成员在派生类中不可见,仅基类可见。
通过继承机制,派生类继承了基类的成员,所继承的成员只属于派生类,即基类和派生类各有一份这样的成员,这点很重要。
接下来,我们不慌看继承,回到类来看:(个人理解所谓可见性即是调用权限!)

#include《iostream》
using namespace std;
class A{
public:
void dump()const{....}
protected:
void set(){......}
private:
void get(){.......}
};
int main()
{
A a;
a.dump();//ok!
/* a.set(); */ //wrong!
/* a.get(); */ //wrong!
return 0;
}
函数set()和get()在main函数中都不能调用,说明它们的调用权限仅属于类,即对main不可见。同理可知dump().

下面我们以公有继承为例:

#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是私有的,所以派生类不可见,但能间接访问.

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

return 0;
}

于是我们知道,在派生类不可见的成员并不是不可访问的,可以通过间接的方式访问!

总结上面的,做了一张表:(注:派生类中成员的可见性是指继承来的和自身添加的成员。)

成员

基类(类)

派生类

main

私有数据

可见

不可见

不可见

私有函数

可见

不可见

不可见

保护数据

可见

可见

不可见

保护函数

可见

可见

不可见

公有数据

可见

可见

可见

公有函数

可见

可见

可见


搜索更多相关主题的帖子: 继承 中国 学习 
2007-10-05 10:28
心跳的感觉
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-10-1
收藏
得分:0 

说的很好..在细点就更好了...

2007-10-05 11:11
csmenglei951
Rank: 1
等 级:新手上路
威 望:1
帖 子:77
专家分:0
注 册:2007-9-30
收藏
得分:0 
顶了
2007-10-05 11:19
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

你讲的跟继承没多大关系,倒是你需要多了解下“作用域”。


Fight  to win  or  die...
2007-10-05 13:05
夕已
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-4-2
收藏
得分:0 
好像...看不怎么懂啊
呵呵
2008-04-02 10:57
eagleboycn
Rank: 1
等 级:新手上路
帖 子:191
专家分:0
注 册:2007-9-26
收藏
得分:0 
看看
学习一下..........
谢谢LZ!

兵法的精要在于韬晦自己
2008-04-02 10:59
chen_zixi
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2008-3-17
收藏
得分:0 
再详细点就好啦
2008-04-06 13:36
树上的番茄
Rank: 1
来 自:湖南
等 级:新手上路
帖 子:32
专家分:0
注 册:2008-3-1
收藏
得分:0 
能够再详细的就再好不过了~
2008-04-29 08:55
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
那是以前的总结,不够深刻//

樱花大战,  有爱.
2008-04-29 10:14
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
不错,顶了

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-06-28 19:16
快速回复:[原创]学习继承的一些总结
数据加载中...
 
   



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

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