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成员,避免代码重复,符合面向对象设计原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值