当前位置: 首页 > news >正文

C++中的继承方式

目录

摘要

1. 公有继承(Public Inheritance)

2. 保护继承(Protected Inheritance)

3. 私有继承(Private Inheritance)

4. 多重继承(Multiple Inheritance)

继承列表的项数


摘要

在 C++ 中,继承是一种让一个类(派生类)从另一个类(基类)获得属性和方法的机制。我们在之前有通过这篇文章有聊到过继承的一些简单知识(C++中的封装,继承和多态-CSDN博客)。下面我们将继续介绍一些在实际项目中常用到的一些继承的方式。

1. 公有继承(Public Inheritance):基类的公有成员和保护成员在派生类中保持其访问权限,公有成员在派生类中仍然是公有的,保护成员在派生类中仍然是保护的。
2. 保护继承(Protected Inheritance):基类的公有成员和保护成员在派生类中都变成保护成员。
3. 私有继承(Private Inheritance):基类的公有成员和保护成员在派生类中都变成私有成员。

此外,C++ 还支持 多重继承(Multiple Inheritance),即一个类可以从多个基类继承。继承列表中的项数理论上没有限制,但过多的继承会导致代码复杂性增加和维护难度上升。

1. 公有继承(Public Inheritance)

在公有继承中,基类的公有成员在派生类中保持为公有成员,保护成员保持为保护成员,而私有成员仍然是私有的。

#include <iostream>
using namespace std;class Base {
public:void publicMethod() { cout << "Base public method" << endl; }
protected:void protectedMethod() { cout << "Base protected method" << endl; }
private:void privateMethod() { cout << "Base private method" << endl; }
};class DerivedPublic : public Base {
public:void derivedMethod() {publicMethod();        // 可以访问protectedMethod();     // 可以访问// privateMethod();    // 无法访问}
};int main() {DerivedPublic obj;obj.publicMethod();        // 可以访问// obj.protectedMethod();  // 无法访问// obj.privateMethod();    // 无法访问obj.derivedMethod();return 0;
}

2. 保护继承(Protected Inheritance)

在保护继承中,基类的公有成员和保护成员在派生类中都变成保护成员,而私有成员仍然是私有的。

#include <iostream>
using namespace std;class Base {
public:void publicMethod() { cout << "Base public method" << endl; }
protected:void protectedMethod() { cout << "Base protected method" << endl; }
private:void privateMethod() { cout << "Base private method" << endl; }
};class DerivedProtected : protected Base {
public:void derivedMethod() {publicMethod();        // 可以访问protectedMethod();     // 可以访问// privateMethod();    // 无法访问}
};int main() {DerivedProtected obj;// obj.publicMethod();     // 无法访问// obj.protectedMethod();  // 无法访问obj.derivedMethod();return 0;
}

3. 私有继承(Private Inheritance)

在私有继承中,基类的公有成员和保护成员在派生类中都变成私有成员,而私有成员仍然是私有的。

#include <iostream>
using namespace std;class Base {
public:void publicMethod() { cout << "Base public method" << endl; }
protected:void protectedMethod() { cout << "Base protected method" << endl; }
private:void privateMethod() { cout << "Base private method" << endl; }
};class DerivedPrivate : private Base {
public:void derivedMethod() {publicMethod();        // 可以访问protectedMethod();     // 可以访问// privateMethod();    // 无法访问}
};int main() {DerivedPrivate obj;// obj.publicMethod();     // 无法访问// obj.protectedMethod();  // 无法访问obj.derivedMethod();return 0;
}

4. 多重继承(Multiple Inheritance)

在多重继承中,一个派生类可以从多个基类继承。需要注意的是,多重继承可能会带来名字冲突和菱形继承等问题,需要小心处理。

#include <iostream>
using namespace std;class Base1 {
public:void methodBase1() { cout << "Base1 method" << endl; }
};class Base2 {
public:void methodBase2() { cout << "Base2 method" << endl; }
};class DerivedMultiple : public Base1, public Base2 {
public:void derivedMethod() {methodBase1();methodBase2();}
};int main() {DerivedMultiple obj;obj.methodBase1();obj.methodBase2();obj.derivedMethod();return 0;
}

继承列表的项数

理论上,继承列表的项数没有限制 -- 多重继承:

#include <iostream>
using namespace std;class Base1 {
public:void methodBase1() { cout << "Base1 method" << endl; }
};class Base2 {
public:void methodBase2() { cout << "Base2 method" << endl; }
};class Base3 {
public:void methodBase3() { cout << "Base3 method" << endl; }
};class DerivedMultiple : public Base1, public Base2, public Base3 {
public:void derivedMethod() {methodBase1();methodBase2();methodBase3();}
};int main() {DerivedMultiple obj;obj.methodBase1();obj.methodBase2();obj.methodBase3();obj.derivedMethod();return 0;
}
http://www.lryc.cn/news/366671.html

相关文章:

  • Vue进阶之Vue无代码可视化项目(四)
  • day40--Redis(二)实战篇
  • 使用Ollama+OpenWebUI本地部署Gemma谷歌AI开放大模型完整指南
  • react的自定义组件
  • 海宁代理记账公司-专业的会计服务
  • matlab 计算三维空间点到直线的距离
  • YOLOv5车流量监测系统研究
  • 单元测试覆盖率
  • 逻辑这回事(三)----时序分析与时序优化
  • [JAVASE] 类和对象(二) -- 封装
  • 开发网站,如何给上传图片的服务器目录授权
  • 特别名词Test Paper2
  • 数据结构-AVL树
  • 数字科技如何助力博物馆设计,强化文物故事表现力?
  • 德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第七周) - 结构化预测
  • 5-Maven-setttings和pom.xml常用配置一览
  • input输入框设置样式
  • 平稳交付 20+ 医院,卓健科技基于 OpenCloudOS 的落地实践
  • Python下载库
  • SAP HCM OPT函数作用
  • Tensorflow音频分类
  • mqtt-emqx:keepAlive机制测试
  • C++基础7:STL六大组件
  • 特别名词Test Paper1
  • 每日题库:Huawe数通HCIA——全部【813道】
  • #04 Stable Diffusion与其他AI图像生成技术的比较
  • 不确定性+电动汽车!含高比例新能源和多类型电动汽车的配电网能量管理程序代码!
  • 准确-K8s系列文章-修改containerd 默认数据目录
  • 深入探索Linux命令:`aulastlog`
  • Debezium日常分享系列之:Debezium 2.6.2.Final发布