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

C++继承:从基础到高级实战指南

继承的基本概念

继承是面向对象编程的核心特性之一,允许一个类(派生类)基于另一个类(基类)来构建。派生类继承基类的属性和方法,同时可以扩展或修改它们。继承的主要目的是实现代码复用和层次化分类。

  • 基类(父类):被继承的类,提供通用属性和方法。
  • 派生类(子类):继承基类的类,可以添加新功能或覆盖基类行为。
  • 继承类型
    • 公有继承(public):基类的公有和保护成员在派生类中保持原有访问权限。
    • 保护继承(protected):基类的公有和保护成员在派生类中变为保护权限。
    • 私有继承(private):基类的公有和保护成员在派生类中变为私有权限。

基本语法

继承用一个:表示

classBaseClass{public:intpublicVar;voidpublicMethod(){}protected:intprotectedVar;private:intprivateVar;};classDerivedClass:publicBaseClass{// 派生类可以访问BaseClass的public和protected成员voidexample(){publicVar=1;// 允许protectedVar=2;// 允许// privateVar = 3; // 错误:不可访问}};

继承的常见用法

1. 公有继承(最常用)
派生类继承基类的接口,同时可以扩展功能:

classAnimal{public:voideat(){cout<<"Eating..."<<endl;}};classDog:publicAnimal{public:voidbark(){cout<<"Barking!"<<endl;}};Dog d;d.eat();// 继承自Animald.bark();// Dog新增方法

2. 方法覆盖(重写)
派生类可以重新定义基类的虚函数(多态基础):

classShape{public:virtualvoiddraw(){cout<<"Drawing Shape"<<endl;}};classCircle:publicShape{public:voiddraw()override{cout<<"Drawing Circle"<<endl;}};Shape*s=newCircle();s->draw();// 输出"Drawing Circle"(多态)

3. 访问控制
通过继承类型控制成员可见性:

classBase{public:intx;protected:inty;};classPubDerived:publicBase{// x仍是public,y仍是protected};classPrivDerived:privateBase{// x和y都变为private};

注意事项

  • 构造函数/析构函数:派生类构造函数会默认调用基类的默认构造函数。若需调用基类特定构造函数,需使用初始化列表:

    classDerived:publicBase{public:Derived(inta):Base(a){}// 调用Base的带参构造函数};
  • 多重继承:C++支持一个类继承多个基类(需谨慎使用,可能引发菱形继承问题):

    classA{/*...*/};classB{/*...*/};classC:publicA,publicB{/*...*/};
  • 虚继承:解决多重继承时的二义性问题:

    classA{/*...*/};classB:virtualpublicA{/*...*/};classC:virtualpublicA{/*...*/};classD:publicB,publicC{/*...*/};// A的成员只有一份
http://www.jsqmd.com/news/582376/

相关文章:

  • 告别繁琐命令行:用快马ai一键生成jdk环境验证项目原型
  • PipedInputStream和PipedOutputStream的源码分析和使用方法详细分析
  • 5个步骤解决Linux内核模块兼容难题:vmware-host-modules的终极适配方案
  • 香橙派环境
  • 新手福音,用快马AI生成带详解的冒泡排序代码,一看就懂
  • 终极指南:如何用tabula-py快速从PDF提取表格数据
  • 浏览器Cookie本地导出工具:安全与效率兼备的开发者必备扩展
  • OpenSpeedy高效发布指南:3大阶段×5个关键步骤
  • 告别手动配置:利用快马平台生成openclaw自动化安装脚本提升部署效率
  • 90% 的 SCI 拒稿都栽在时态上!引言 / 文献综述时态黄金规则,一篇讲透
  • 终极GPU显存检测指南:用memtest_vulkan快速诊断显卡硬件问题
  • 如何优化 seocpm
  • 5分钟解决Windows Dlib安装难题:告别编译错误的终极指南
  • ViGEmBus虚拟游戏手柄驱动:Windows游戏输入终极解决方案
  • 快速验证密码管理流程:用快马平台十分钟搭建极域课堂系统模拟工具
  • 智能游戏辅助工具如何通过LCU技术重新定义竞技体验?
  • 解决游戏控制器兼容性难题:ViGEmBus驱动全攻略
  • 2026 国产仿真设计工具推荐,帮你实现自主可控 - 品牌2026
  • 效率飙升:用快马AI将Apifox的Mock接口自动转化为Vue3前端代码
  • numpy的操作
  • 从3大维度掌握zotero-format-metadata:解决文献格式混乱的实战指南
  • C++权限对继承的影响
  • UE5-MCP架构深度解析:AI驱动的游戏开发自动化引擎
  • C++27执行策略迁移 checklist:从C++20升级必做的7项静态断言校验、3类编译器诊断开关启用及GCC 14.3/Clang 18.1/MSVC 19.42兼容性矩阵
  • 太阳能水位监测站
  • GOOSE-LightGBM自动化参数寻优的多变量分类预测Matlab程序
  • 如何通过CyberpunkSaveEditor实现赛博朋克2077存档编辑与自定义体验?
  • 保研人:值得推荐的保研机构,源于权威背景与海量成功案例 - 博客湾
  • ObsPy实战入门:从时间序列数据处理到地震事件可视化的5个核心技巧
  • Z-Image-Turbo_Sugar脸部Lora效果展示:长时间生成任务稳定性与显存泄漏测试