当前位置: 首页 > 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.dtcms.com/a/187207.html

相关文章:

  • 计算机组成原理———CPU指令周期精讲
  • Java静态变量笔记
  • 并发笔记-并发问题与事件驱动模型(五)
  • Spring Bean有哪几种配置方式?
  • Nacos源码—8.Nacos升级gRPC分析五
  • neptune系统详解
  • mysql dump 导入导出用法
  • js 画立方体软件开发日记2
  • MySQL——性能调优
  • 面试题:C++虚函数可以是内联函数吗?
  • 嵌入式学习笔记 - MSB, LSB
  • 策 略 模 式
  • 马铃薯土豆幼苗与杂草检测数据集VOC+YOLO格式3051张2类别
  • cursor 如何在项目内自动创建规则
  • CSDN博客粘贴图片失败如何解决
  • 网络编程epoll和udp
  • 联想 SR550 服务器,配置 RAID 5教程!
  • CSRF记录
  • Megatron系列——张量并行
  • Clang实现C++文件分析,含Python实战
  • 嵌入式系统:从基础到应用的全面解析
  • MySQL 备份与恢复
  • Linux环境下安装MySQL
  • 5月12日复盘-RNN
  • 1.8 梯度
  • uni-app学习笔记五--vue3插值表达式的使用
  • 龙虎榜——20250512
  • 硬件设备基础
  • Claude深度解析:从技术原理到实战应用的全栈指南
  • Model.eval() 与 torch.no_grad() PyTorch 中的区别与应用