使用包含:易于理解,类声明中包含表示被包含类的显式命名对象,代码可以通过名称引用这些对象;

使用继承:将使关系更抽象,且继承会引起很多问题,尤其是从多个基类继承时。

私有继承所提供的特性确实比包含多。

通常,应使用包含来建立has-a关系;如果新类需要访问原有类的保护成员,或需要重新定义虚函数,则应使用私有继承。

保护继承

保护继承:基类的公有成员和保护成员都将成为派生类的保护成员。

私有继承与保护继承的区别,在第三代继承中就体现出来了。使用私有继承时,第三代类不能使用基类的接口;使用保护继承时,基类的公有方法在第二代中将变成受保护的,因此第三代派生类可以使用它们。

使用using重新定义访问权限

(在继承提供了一种机制来对基类公有方法的访问权限的控制,属性的改变):使用保护派生或私有派生时,基类的公有成员将成为保护成员或私有成员。

假设要让基类的方法在派生类中可用,可以有两种方法:

1) 定义一个使用该基类方法的派生类方法:

2) 将函数调用包装在另一个函数调用中:

在类声明中使用using;

class Student:private std::string, private std::valarray<double>

{

public:

using std::valarray<double>::min;

using std::valarray<double>::max;

}

using声明使得valarray类的min,max方法可用,就像是Student类的公有方法一样;

而且注意使用using声明时,只使用成员名,没有圆括号,函数特征标,返回类型。

Using声明只适用于继承,而不适用与包含。

最新文章

  1. 简历生成平台项目开发-STEP4第二次项目例会讨论
  2. ARM指令学习,王明学learn
  3. Linux:Ubuntu 14.04 Server 离线安装Jjava8(及在线安装)
  4. js响应HTML客户端下拉列表的修改事件
  5. csharp:引入app.manifest,程序在win7下以管理员权限运行配置方法
  6. oracle sql日期比较
  7. Daily Scrum4
  8. 纯CSS3大转盘抽奖(响应式、可配置)
  9. c# 无损高质量压缩图片代码
  10. Swfit中视图跳转
  11. javascript高级知识点——函数的长度
  12. Node.js完整的响应html页面(包括css,js文件)
  13. Struts2_day04
  14. SQL Server 备份还原
  15. 高德地图 API 计算两个城市之间的距离
  16. 设置 Linux 下打印机的几种方式
  17. QT编译错误:Project ERROR: This example requires Qt to be configured with -opengl desktop
  18. jenkins job构建后汇总结果到同一个文本文档中去
  19. MVC缓存(一)
  20. uboot向linux传递输出任何log信息的方法

热门文章

  1. HandleErrorAttribute
  2. c语言实践:求两个数的最大公约数
  3. Django-----restframework图解
  4. Cookie的有效访问路径
  5. Python基础入门-os模块
  6. GC: CMS垃圾回收器三(实践)
  7. 史融资2.5亿的“自主国产”红芯浏览器,其实是个套壳Chrome
  8. 应用Bundle捆绑压缩技术
  9. xubuntu14.04LTS安装steam后运行的错误解决办法
  10. SqlServer删除重复数据的方法