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

C++ 中的继承与派生

在 C++ 中,继承与派生是面向对象编程的重要特性,它们允许创建新类(派生类)来复用现有类(基类)的属性和方法,同时还能添加新的功能或修改现有功能,下面为你详细介绍。

基本概念

  • 继承:是指一个新类(派生类)可以从一个或多个已有类(基类)中获取其属性和方法的机制。通过继承,派生类可以复用基类的代码,提高代码的可重用性和可维护性。
  • 派生:是指从一个已有的类创建新类的过程。派生类除了拥有基类的成员外,还可以添加自己的成员,从而扩展基类的功能。

语法

定义派生类的一般语法如下:

class 派生类名 : 继承方式 基类名 {
    // 派生类的成员声明
};
  • 派生类名:新创建的类的名称。
  • 继承方式:指定派生类如何继承基类的成员,有三种继承方式:public(公有继承)、protected(保护继承)和 private(私有继承)。
  • 基类名:已有的类的名称。

继承方式

1. 公有继承(public
  • 基类的公有成员在派生类中仍然是公有的。
  • 基类的保护成员在派生类中仍然是保护的。
  • 基类的私有成员在派生类中不可直接访问。
#include <iostream>

// 基类
class Base {
public:
    void publicFunc() {
        std::cout << "Base public function" << std::endl;
    }
protected:
    void protectedFunc() {
        std::cout << "Base protected function" << std::endl;
    }
private:
    void privateFunc() {
        std::cout << "Base private function" << std::endl;
    }
};

// 派生类,公有继承
class Derived : public Base {
public:
    void test() {
        publicFunc(); // 可以访问
        protectedFunc(); // 可以访问
        // privateFunc(); // 不能访问
    }
};

int main() {
    Derived d;
    d.publicFunc(); // 可以访问
    // d.protectedFunc(); // 不能在类外访问
    d.test();
    return 0;
}
2. 保护继承(protected
  • 基类的公有成员和保护成员在派生类中都变为保护的。
  • 基类的私有成员在派生类中不可直接访问。
3. 私有继承(private
  • 基类的公有成员和保护成员在派生类中都变为私有的。
  • 基类的私有成员在派生类中不可直接访问。

派生类的构造函数和析构函数

  • 构造函数:派生类的构造函数在创建对象时会先调用基类的构造函数,然后再执行自身的构造函数体。如果基类有带参数的构造函数,派生类需要在其构造函数的初始化列表中显式调用基类的构造函数。
  • 析构函数:派生类的析构函数在对象销毁时会先执行自身的析构函数体,然后再调用基类的析构函数。
#include <iostream>

// 基类
class Base {
public:
    Base() {
        std::cout << "Base constructor" << std::endl;
    }
    ~Base() {
        std::cout << "Base destructor" << std::endl;
    }
};

// 派生类
class Derived : public Base {
public:
    Derived() {
        std::cout << "Derived constructor" << std::endl;
    }
    ~Derived() {
        std::cout << "Derived destructor" << std::endl;
    }
};

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

派生类对基类成员的访问和覆盖

  • 访问:派生类可以直接访问基类的公有和保护成员,但不能直接访问基类的私有成员。
  • 覆盖:派生类可以定义与基类同名的成员函数,从而覆盖基类的成员函数。当通过派生类对象调用该函数时,将调用派生类中定义的函数。
#include <iostream>

// 基类
class Base {
public:
    void func() {
        std::cout << "Base func" << std::endl;
    }
};

// 派生类
class Derived : public Base {
public:
    void func() {
        std::cout << "Derived func" << std::endl;
    }
};

int main() {
    Derived d;
    d.func(); // 调用派生类的 func 函数
    d.Base::func(); // 调用基类的 func 函数
    return 0;
}

多重继承

C++ 支持多重继承,即一个派生类可以从多个基类继承属性和方法。多重继承的语法如下:

class 派生类名 : 继承方式 基类名1, 继承方式 基类名2, ... {
    // 派生类的成员声明
};

多重继承虽然可以增加代码的复用性,但也会带来一些问题,如命名冲突和菱形继承问题,需要使用作用域解析运算符或虚拟继承来解决。


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

相关文章:

  • 单调队列及其相关题解
  • 华为2288H V5服务器无法启动问题处理
  • 【2023 K8s CKA】云原生K8s管理员认证课-零基础 考题更新免费学-全新PSI考试系统
  • 学习京东写测试用例
  • Linux 服务器部署deepseek
  • 2025 docker可视化管理面板DPanel的安装
  • 探索后端开发中的异步API:基于Resilience4j与Reactive Programming的高性能设计
  • AI Agent未来走向何方?
  • 数值积分:通过复合梯形法计算
  • 网络将内网服务转换到公网上
  • Spring Boot 的约定优于配置,你的理解是什么?
  • 域森林基础及环境搭建
  • Kubernetes 面试题精解:从入门到进阶
  • JAVA实战开源项目:宠物咖啡馆平台(Vue+SpringBoot) 附源码
  • 【代码随想录】刷题记录(114)-岛屿数量(深搜)
  • 无耳科技 Solon v3.0.8 发布,Java 企业级应用开发框架
  • 【LLM强化学习】LLM 强化学习中 Critic 模型训练详解
  • 蓝桥杯篇---实时时钟 DS1302
  • 若依 ruoyi-vue 隐藏字典样式
  • 什么是多光谱环形光源