48继承与派生

简介: 48继承与派生

C++入门——60s从0到1

继承与派生

 

C++中的继承与派生是面向对象编程的两个核心概念,它们允许程序员创建新的类(派生类)基于已有的类(基类),从而实现代码的重用和扩展。

 

继承

 

是指一个类(派生类或子类)继承另一个类(基类或父类)的属性和行为。这意味着派生类会获得基类的所有公有(public)和保护(protected)成员(包括数据成员和成员函数)。派生类可以添加新的成员,也可以重写或扩展基类的成员。

 

派生

 

是指通过继承创建新类的过程。派生类继承了基类的所有公有和保护成员,同时还可以添加新的成员或重写基类的成员。

 

继承的种类

 

C++支持三种继承方式:

 

1.公有继承(Public Inheritance):基类的公有成员和保护成员在派生类中保持相同的访问权限,而基类的私有成员在派生类中是不可访问的。

 

2.保护继承(Protected Inheritance):基类的公有成员和保护成员在派生类中变为保护成员,而基类的私有成员在派生类中是不可访问的。

 

3.私有继承(Private Inheritance):基类的公有成员和保护成员在派生类中变为私有成员,而基类的私有成员在派生类中是不可访问的。

 

继承与派生的特点

 

- 代码重用:通过继承,派生类可以重用基类的代码,避免了代码重复。

- 扩展性:派生类可以在继承基类的基础上添加新的功能或修改已有功能。

- 多态性:通过继承和虚函数,可以实现运行时多态,即根据对象的实际类型调用相应的成员函数。

 

示例

 

下面是一个简单的C++继承与派生的示例:

 

#include <iostream>
 
// 基类
class Shape {
public:
    void draw() {
        std::cout << "Drawing a shape..." << std::endl;
    }
};
 
// 派生类
class Circle : public Shape {
public:
    void draw() override {  // 重写基类的draw方法
        std::cout << "Drawing a circle..." << std::endl;
    }
};
 
int main() {
    Shape* shapePtr = new Circle();  // 向上转型
    shapePtr->draw();  // 调用Circle类的draw方法,输出"Drawing a circle..."
    delete shapePtr;
    return 0;
}
```

 

在这个示例中,`Circle` 类继承自 `Shape` 类,并重写了 `draw` 方法。在 `main` 函数中,我们创建了一个 `Circle` 对象,并将其指针赋给了一个 `Shape` 类型的指针 `shapePtr`。由于 `Circle` 是 `Shape` 的派生类,因此这种转换是合法的(向上转型)。当我们调用 `shapePtr->draw()` 时,实际上调用的是 `Circle` 类的 `draw` 方法,而不是 `Shape` 类的。这就是多态性的一个例子。

目录
相关文章
|
分布式计算 安全 调度
PowerJob未授权访问漏洞(CVE-2023-29922)
PowerJob是一个开源分布式计算和作业调度框架,它允许开发人员在自己的应用程序中轻松调度任务。PowerJob V4.3.1版本存在安全漏洞,该漏洞源于存在不正确访问控制。
1896 1
PowerJob未授权访问漏洞(CVE-2023-29922)
|
移动开发 前端开发 JavaScript
分享66个表单按钮,总有一款适合您
分享66个表单按钮,总有一款适合您
119 4
|
存储 缓存 前端开发
两种异步日志方案的介绍
两种异步日志方案的介绍
393 0
|
算法 机器人 API
Nvidia Isaac Sim代码编程 入门教程 2024(7)
Nvidia Isaac Sim 2024年的代码编程入门教程,涵盖了Isaac Sim环境的配置、核心API的使用以及如何利用Python API搭建基本仿真demo。
2748 0
|
安全
BurpSuite进阶篇--自动识别Token值
BurpSuite进阶篇--自动识别Token值
897 21
BurpSuite进阶篇--自动识别Token值
IntelliJ IDEA 设置类注释模板
IntelliJ IDEA 设置类注释模板
447 0
|
算法 Java
LeetCode算法题---两数之和(一)
LeetCode算法题---两数之和(一)
109 0
《云上社交行业技术服务白皮书》——第三章 云上社交典型场景与架构——3.2 细分领域社交——3.2.2 电商场景(1)
《云上社交行业技术服务白皮书》——第三章 云上社交典型场景与架构——3.2 细分领域社交——3.2.2 电商场景(1)
559 0
|
Cloud Native 对象存储 数据安全/隐私保护
带你读《企业级云原生白皮书项目实战》——3.2.1 ACR容器镜像服务(2)
带你读《企业级云原生白皮书项目实战》——3.2.1 ACR容器镜像服务(2)
293 0