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

青少年编程与数学 02-010 C++程序设计基础 29课题、继承

青少年编程与数学 02-010 C++程序设计基础 29课题、继承

  • 一、基本概念
  • 二、继承的语法
  • 三、继承类型
  • 四、 派生类的构造和析构
  • 五、函数重写(Override)
  • 六、多重继承
  • 七、虚继承
  • 八、总结

课题摘要: 本文详细介绍了C++中继承和派生的概念、语法、类型、构造和析构过程、函数重写、多重继承和虚继承。继承允许派生类从基类继承属性和行为并进行扩展或修改。继承类型包括公有、保护和私有继承,影响基类成员在派生类中的访问权限。派生类构造和析构时,先调用基类相应函数。派生类可重写基类虚函数实现多态。C++支持多重继承,虚继承解决菱形继承问题。合理使用继承可构建层次清晰、结构合理的类体系。


在C++中,继承和派生是面向对象编程的核心概念,允许一个类(派生类)从另一个类(基类)继承属性和行为,并在此基础上进行扩展或修改。

一、基本概念

  • 基类(Base Class):被继承的类,也称为父类。
  • 派生类(Derived Class):继承基类的类,也称为子类。

派生类继承了基类的成员(数据成员和成员函数),并可以添加新的成员或重写基类的成员函数。

二、继承的语法

class BaseClass {
    // 基类成员
};

class DerivedClass : access-specifier BaseClass {
    // 派生类成员
};
  • access-specifier 可以是 publicprotectedprivate,决定了基类成员在派生类中的访问权限。

三、继承类型

  • 公有继承(public)

    • 基类的 public 成员在派生类中仍为 public
    • 基类的 protected 成员在派生类中仍为 protected
    • 基类的 private 成员在派生类中不可访问。
    class Base {
    public:
        int publicVar;
    protected:
        int protectedVar;
    private:
        int privateVar;
    };
    
    class Derived : public Base {
        // publicVar 是 public
        // protectedVar 是 protected
        // privateVar 不可访问
    };
    
  • 保护继承(protected)

    • 基类的 publicprotected 成员在派生类中都变为 protected
    • 基类的 private 成员在派生类中不可访问。
    class Derived : protected Base {
        // publicVar 是 protected
        // protectedVar 是 protected
        // privateVar 不可访问
    };
    
  • 私有继承(private)

    • 基类的 publicprotected 成员在派生类中都变为 private
    • 基类的 private 成员在派生类中不可访问。
    class Derived : private Base {
        // publicVar 是 private
        // protectedVar 是 private
        // privateVar 不可访问
    };
    

四、 派生类的构造和析构

  • 构造函数:派生类的构造函数会先调用基类的构造函数,再执行派生类的构造函数体。
  • 析构函数:派生类的析构函数会先执行派生类的析构函数体,再调用基类的析构函数。
class Base {
public:
    Base() { cout << "Base Constructor" << endl; }
    ~Base() { cout << "Base Destructor" << endl; }
};

class Derived : public Base {
public:
    Derived() { cout << "Derived Constructor" << endl; }
    ~Derived() { cout << "Derived Destructor" << endl; }
};

int main() {
    Derived d;
    return 0;
}

输出:

Base Constructor
Derived Constructor
Derived Destructor
Base Destructor

五、函数重写(Override)

派生类可以重写基类的虚函数(virtual),以实现多态。

class Base {
public:
    virtual void show() {
        cout << "Base show" << endl;
    }
};

class Derived : public Base {
public:
    void show() override {
        cout << "Derived show" << endl;
    }
};

int main() {
    Base* b = new Derived();
    b->show();  // 输出: Derived show
    delete b;
    return 0;
}

六、多重继承

C++支持多重继承,即一个派生类可以从多个基类继承。

class Base1 {
public:
    void show1() {
        cout << "Base1 show" << endl;
    }
};

class Base2 {
public:
    void show2() {
        cout << "Base2 show" << endl;
    }
};

class Derived : public Base1, public Base2 {
};

int main() {
    Derived d;
    d.show1();  // 输出: Base1 show
    d.show2();  // 输出: Base2 show
    return 0;
}

七、虚继承

虚继承用于解决多重继承中的菱形继承问题,确保基类只被继承一次。

class Base {
public:
    int data;
};

class Derived1 : virtual public Base {
};

class Derived2 : virtual public Base {
};

class FinalDerived : public Derived1, public Derived2 {
};

int main() {
    FinalDerived fd;
    fd.data = 10;  // 不会产生二义性
    return 0;
}

八、总结

  • 继承允许派生类复用基类的代码。
  • 继承类型决定了基类成员在派生类中的访问权限。
  • 派生类可以重写基类的虚函数以实现多态。
  • 多重继承和虚继承提供了更灵活的继承机制,但也增加了复杂性。

通过合理使用继承和派生,可以构建出层次清晰、结构合理的类体系。


http://www.kler.cn/a/577135.html

相关文章:

  • 常用AI工具推荐
  • Python包结构与 `__init__.py` 详解
  • 如何用postman设置接口测试关联
  • CentOS 最新系统安装 Redis 7.0.11 详细指南
  • PyTorch深度学习框架60天进阶学习计划第16天:循环神经网络进阶!
  • Web3的技术挑战:去中心化的可扩展性与性能问题
  • 【保姆级 HAL 库学习定时器】
  • C语言-语法
  • 【linux网络编程】文件描述符
  • C++题解(32) 2025顺德一中少科院信息学创新班(四期)考核复盘 U536935 黑白图像
  • JavaScript基础-比较运算符
  • springcloud sentinel教程
  • 电脑睡眠智能管控:定时、依状态灵活调整,多模式随心选
  • CameraX学习2-关于录像、慢动作录像
  • Python评估网络脆弱性
  • 对数几率回归(LogisticRegression)基础知识(包含分类任务的概念及评价指标)
  • Docker编排工具Docker Compose
  • sqlserver删除表记录语句,及删除表时清零ID的SQL语句
  • 【高级篇】大疆Pocket 3加ENC编码器实现无线RTMP转HDMI进导播台
  • CATIA V5 二次开发实战:Python实现零件实体智能转产品装配