dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | flex | CRM | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>C/C++>C/C++技术资料>文章内容
学习继承的一些总结
来源:bc-cn 作者:bc-cn

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

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

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

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

#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

私有数据

可见

  不可见

  不可见

私有函数

  可见

  不可见

  不可见

保护数据

  可见

  可见

不可见

保护函数

  可见

  可见

  不可见

公有数据

  可见

  可见

  可见

公有函数

  可见

  可见

可见

 


上一篇:深入讲解main()返回值问题   下一篇:C++程序设计之四书五经
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·C语言数组排序小结
·Python 与 C++ 程序的简单实例对
·c++ 数组与指针
·C++中的内存管理(new、delete、
·如何用C语言开发DSP嵌入式系统
·如何用C语言开发DSP嵌入式系统
·Linux下C语言编程
·学习arm的话先看哪本书?
·C++初学者应该关心的优秀图书一
·利用C语言小程序来解决大问题
·用C语言写PHP扩展的步骤
·用C语言扩展PHP功能
  相关文章
·深入讲解main()返回值问题
·C++程序设计之四书五经
·sscanf函数的高级用法
·C++箴言:声明为非成员函数时机
·在Visual C++应用程序中彻底清除
·C++箴言:让=返回一个*this的引
·关于C++程序中的内存划分介绍
·C++箴言:绝不在构造或析构期调
·用C语言编写Windows服务程序的五
·C++箴言:理解inline的介入和排
·C程序实现汉字内码与GB码
·C++箴言:将强制转型减到最少
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763