千家信息网

C++私有继承是什么

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,本篇内容介绍了"C++私有继承是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.私有继承通过私
千家信息网最后更新 2024年11月18日C++私有继承是什么

本篇内容介绍了"C++私有继承是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.私有继承

通过私有继承,我们可以实现一种has-a的关系。

但前文当中我们也曾说过,通过包含对象我们一样可以实现has-a的关系,那么在我们进行编码的时候,究竟应该使用哪一种呢?

根据C++ Primer中的阐述,大多数程序员会更倾向于使用包含,因为这更加容易理解。类声明当中包含对象,我们可以在成员函数当中直接使用,这显然更加直观,而使用继承的方式则非常地抽象。

其次,多个基类继承的时候,也可能会引起一些问题。比如包含同名方法的独立基类,或者是拥有共同祖先的独立基类等等。另外,使用私有继承只能使用一个父类对象,而通过包含的方式可以使用任意多个对象。

但私有继承的方式也有一些特有的优点,比如说可以在派生类当中使用基类的保护成员,但如果是包含的话,就没办法使用这些保护成员或者方法了。另外,派生类可以重新定义虚函数,而包含类的方式不行。

只能说通常我们要实现has-a的包含关系,应该使用包含类对象的方式,但在一些特殊场景当中,也许使用继承是更好的选择。

2.保护继承

保护继承是私有继承的变体,保护继承在列出基类时使用关键字protected:

class Student : protected std::string, protected std::valarray {    ...};

使用保护继承时,基类的公有成员和保护成员都会成为派生类的保护成员。

和私有继承一样,基类的接口在派生类当中也是可用的,但在继承层次结构之外是不可用的。当我们从派生类继续派生出第三代类的时候,私有继承和保护继承的区别就出来了。使用私有继承时,第三代类不能使用基类的接口,因为基类的公有方法在派生类当中变成了私有方法。而使用保护继承的话,基类的公有方法在派生类变成受保护的,所以第三代派生类依然可以使用。

3.使用using重新定义访问权限

使用保护派生或者是私有派生时,基类的公有成员将会变成保护成员或者是私有成员。

假设要想让基类的方法在派生类外部可用,方法之一是单独开发一个派生类方法,在这个方法当中调用基类的方法。比如假设希望Student类能够使用valarray类的sum方法,一个做法是在Student中声明一个sum方法,然后在这个方法当中调用valarray类的sum方法:

double Student::sum() const {    return std::valarray::sum();}

另外一种方法是将调用函数包装在另外一个函数的调用中,即使用using声明,来指出派生类可以使用特定的基类成员。

比如假设我们希望Student类能够使用valarray的sum和max方法,我们可以在student.h的公有部分加上using声明:

class Student : private std::string, private std::valarray {   public:     using std::valarray::min;     using std::valarray::max;    ...};

这样一来,valarray::minvalarray::max就变得可用了,就好像是Student的公有方法一样:

cout << ada[i].max() << endl;

这里要注意,using声明只使用方法名,没有圆括号、函数特征表和返回类型。

"C++私有继承是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

方法 私有 保护 成员 对象 方式 函数 C++ 时候 三代 内容 多个 接口 更多 知识 独立 不行 特殊 直观 学有所成 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 通用网络技术咨询品质保障 数据库笔试题及答案 现有学生选课系统数据库 贵州师范大学计算机网络技术 边缘vCDN网络安全 民法与网络安全相关的法条 java查询数据库中存储过程 苹果平板登录id时服务器出错 韩美组建网络安全 如何使用云服务器打印机 软件开发公司运营啊部 计算机网络技术累不累 软件开发没有按时交付 三种软件开发生命周期的特点 霍尔果斯美讯网络技术有限公司 图片服务器 ftp 深圳壹品红网络技术公司怎么样 服务器地址吗 3g软件开发专业方向 计算机网络技术只要做什么 怎么连接邻居家的服务器 数据库开发相关简历 数据库服务器开不起来 曙光服务器如何进入安全模式 自贡网络安全服务费用 高科技互联网教育 安仁学计算机软件开发培训哪里好 起床战争要在哪个服务器玩 大陆云服务器赠金用完了怎么办 使用标题词或关键词查询数据库
0