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

C++类的继承和派生

一、继承基本概念

  1. 继承机制:通过已有类(基类/父类)创建新类(派生类/子类),实现代码重用和扩展

  2. 继承关系:
    • 基类 → 提供基础功能

    • 派生类 → 继承基类成员 + 新增特有成员

  3. 继承优势:
    • 减少代码冗余

    • 提高开发效率

    • 增强程序扩展性

二、继承类型

  1. 单继承:仅从一个基类派生
    class Derived : public Base { ... };
    
  2. 多继承:从多个基类派生
    class Derived : public Base1, protected Base2 { ... };
    

三、访问控制与继承方式

继承方式基类public成员基类protected成员基类private成员
publicpublicprotected不可访问
protectedprotectedprotected不可访问
privateprivateprivate不可访问

四、构造与析构机制

  1. 执行顺序:
    • 构造函数:基类 → 成员对象 → 派生类

    • 析构函数:派生类 → 成员对象 → 基类

  2. 派生类构造函数格式:

    Derived(参数表) : Base1(参数), Base2(参数), 成员对象(参数) { ... }
    

五、多继承的挑战与解决方案

  1. 二义性问题:
    • 表现:多个基类存在同名成员

    • 解决方案:

    对象.基类名::成员 // 显式指定作用域
    
  2. 菱形继承问题:
    • 表现:派生类包含重复基类成员

    • 解决方案:虚继承(virtual inheritance)

    class B : virtual public A { ... };
    class C : virtual public A { ... };
    class D : public B, public C { ... };
    

六、特殊继承技术

  1. 虚基类特性:
    • 确保派生类只保留一份基类副本

    • 最终派生类需直接调用虚基类构造函数

  2. 抽象类:
    • 包含纯虚函数的类(virtual void func() = 0;)

    • 不可实例化,用于接口定义

七、类型兼容规则

  1. 派生类对象可赋值给基类对象
  2. 基类指针/引用可指向派生类对象
    Base* p = new Derived();
    

八、设计实践要点

  1. 优先使用public继承(符合IS-A关系)
  2. 谨慎使用多继承,优先组合代替继承
  3. 虚函数与继承结合实现运行时多态
  4. 遵循"基类析构函数应为虚函数"原则

示例问题解决方案:
原Student和CollegeStudent类可通过继承优化:

class Student {
public:void display() { /* 显示num和name */ }
protected:int num;string name;
};class CollegeStudent : public Student {
public:void display() { Student::display();  // 重用基类方法cout << speciality;  // 新增特性}
private:string speciality;
};

通过继承复用num和name成员,避免代码重复,符合面向对象设计原则。

http://www.xdnf.cn/news/416665.html

相关文章:

  • MYSQL事务原理分析(三)
  • 动作识别笔记
  • Linux 详解inode
  • 密码学--希尔密码
  • 电子电器架构 --- 借力第五代架构,驱动汽车产业创新引擎
  • Ansible内置模块之 group
  • vue3+vite 自动导入文件夹下所有路由
  • 【Python算法】最长递增子序列
  • python与nodejs哪个性能高
  • 1688平台开放接口实战:如何通过API获取店铺所有商品数据(Python示例)‌
  • 从PNG到矢量图:星云智控Logo的商用矢量转换全解析-优雅草卓伊凡
  • 三、transformers基础组件之Model
  • Java中进阶并发编程
  • 手撕算法(定制整理版2)
  • Day 15
  • 魔搭社区(modelscope)和huggingface下载模型到本地的方法
  • CSRF记录
  • 信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(十八)
  • 【PmHub后端篇】Redis分布式锁:保障PmHub流程状态更新的关键
  • csdn博客打赏功能
  • 加固python文件
  • 什么是 NoSQL 数据库?它与关系型数据库 (RDBMS) 的主要区别是什么?
  • (六)毛子整洁架构(测试)
  • 软件测试——开发模型
  • 杭州电商全平台代运营领军者——品融电商
  • 企业数字化中台建设方案(AI/技术中台、数据中台、业务中台)
  • 【Linux】基础I/O文件——文件描述符的引入
  • switch能否作用在byte上,long上,string上
  • 小皮面板从未授权到RCE
  • 常微分方程(OTD)和偏微分方程(PDE),以及混合精度