c++ 面向对象实现has-a时 啥时候用包含,啥时候用私有继承

news/2024/7/3 12:24:54 标签: c++, 多态,

文章目录

  • 包含和私有继承的关系
  • 构造函数初始化的不同
  • 使用包含还是私有继承

c++ 面向对象的过程中, 包含私有继承都可以实现has-a的关系,下面我们来讨论一下啥时候用包含,啥时候用私有继承

包含和私有继承的关系

  1. 包含将对象作为一个命名的成员对象添加到中,而私有集成将对象作为一个未被命名的继承对象添加到
  2. 我们称通过包含或者继承而来的对象为术语子对象(subobject)
  3. 私有继承提供的特性和包含相同
    1. 获得实现
    2. 不获得接口

构造函数初始化的不同

包含的的写法

class Student{
private:
	string name;  //use a string object for name
	valarray<double> scores; //use a val
}

私有继承的的写法

class Student : private std::string,private std::valarray<double>{
public:
	……
}

使用包含还是私有继承

由于既可以使用包含,也可以使用使用私有继承来建立has-a关系,那么我们应该使用哪一种方式呢?

答案是:包含

包含相对于继承的优点

  1. 包含私有继承更好理解
  2. 继承会引起很多问题,尤其从多个基继承时
  3. 包含能够包含多个同的子对象,比如我可以包含三个string对象

包含相对于继承的缺点

  1. 私有继承能提供的特性比包含多
  2. 私有继承可以访问原来protect修饰的成员变量,而包含不可以
  3. 私有继承的派生可以重新定义虚函数

总而言之:一般情况下应该使用包含实现has-a关系,如果新需要访问原有的保护函数,或需要重新定义虚函数,则应使用私有继承


http://www.niftyadmin.cn/n/1027665.html

相关文章

C++核心准则​SL.io.50:避免使用endl

SL.io.50: Avoid endl SL.io.50&#xff1a;避免使用endl Reason&#xff08;原因&#xff09; The endl manipulator is mostly equivalent to \n and "\n"; as most commonly used it simply slows down output by doing redundant flush()s. This slowdown can …

安装ubuntu tools

文章目录简介下载tools解压tools安装tools简介 本文参考了文末的两篇文章&#xff0c;把两篇文章中的点结合了一下。如有侵权立删。 下载tools 1、打开虚拟机VMware Workstation&#xff0c;启动Ubuntu系统&#xff0c;菜单栏 - 虚拟机 - 安装VMware Tools&#xff0c;不启动…

C++核心准则​A.1-A.4:架构理念

A.1: Separate stable code from less stable code A.1&#xff1a;将稳定代码与不稳定代码分开 Isolating less stable code facilitates its unit testing, interface improvement, refactoring, and eventual deprecation. 隔离不稳定的代码有助于其单元测试&#xff0c;接…

evernote 印象笔记安装或者升级就显示找不到EVERNOTE.MSI

情况说明 我其实也不知道为什么&#xff0c;突然之间印象笔记就打不开&#xff0c;也卸载不掉&#xff0c;我其实已经很久没用印象笔记了&#xff0c;这个笔记软件在今天来说确实不算是一个好的笔记软件了&#xff0c;奈何里面还有我的资料&#xff0c;有时候不得不再打开&…

C++核心准则NR.2:不要坚持一个函数中只包含一个返回语句

NR.2: Dont insist to have only a single return-statement in a function NR.2&#xff1a;不要坚持一个函数中只包含一个返回语句 Reason&#xff08;原因&#xff09; The single-return rule can lead to unnecessarily convoluted code and the introduction of extra …

学习JVM垃圾回收机制

垃圾回收是JVM的后台线程完成的&#xff0c;回收内存中不再被引用的那些对象所占用的内存空间。垃圾回收机制在内存达到预先设定的阀值后被触发。经过几个版本的演化&#xff0c;目前主流的算法是CMS&#xff0c;即concurrent mark and sweeping&#xff0c;新一代GC算法G1&…

matlab rand randn 每次生成的随机数都一样的解决方案

文章目录问题说明解决方案例子生成不重复的随机数生成重复的随机数结论参考文献问题说明 在Matlab应用中&#xff0c;我们经常需要用到随机数&#xff0c;比如rand()&#xff0c;randn()等函数&#xff0c;都是生成某一类随机数的函数。对于rand()函数来说&#xff0c;每一次启…

POJ-1054 The Troublesome Frog 搜索+剪枝 Or DP+Hash

搜索剪枝 #include <cstdlib> #include <cstring> #include <cstdio> #include <algorithm> #include <iostream> #define MAXN 5005 using namespace std;/* 题意:给定一个行数和列数固定的网格,再给定若干个点,这些点是使用矩形上网格线交叉点…