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版本存在安全漏洞,该漏洞源于存在不正确访问控制。
1935 1
PowerJob未授权访问漏洞(CVE-2023-29922)
|
存储 缓存 前端开发
两种异步日志方案的介绍
两种异步日志方案的介绍
429 0
|
Python
揭秘Python编程核心:一篇文章带你深入掌握for循环与while循环的奥秘!
【8月更文挑战第21天】Python中的循环结构——for循环与while循环,是编程的基础。for循环擅长遍历序列或集合中的元素,如列表或字符串;而while循环则在未知循环次数时特别有用,基于某个条件持续执行。本文通过实例展示两种循环的应用场景,比如用for循环计算数字平方和用while循环计算阶乘。此外,还通过案例分析比较了两者在处理用户输入任务时的不同优势,强调了根据实际需求选择合适循环的重要性。
548 0
|
算法 机器人 API
Nvidia Isaac Sim代码编程 入门教程 2024(7)
Nvidia Isaac Sim 2024年的代码编程入门教程,涵盖了Isaac Sim环境的配置、核心API的使用以及如何利用Python API搭建基本仿真demo。
2972 0
|
安全
BurpSuite进阶篇--自动识别Token值
BurpSuite进阶篇--自动识别Token值
960 21
BurpSuite进阶篇--自动识别Token值
IntelliJ IDEA 设置类注释模板
IntelliJ IDEA 设置类注释模板
459 0
|
算法 Java
LeetCode算法题---两数之和(一)
LeetCode算法题---两数之和(一)
116 0
《云上社交行业技术服务白皮书》——第三章 云上社交典型场景与架构——3.2 细分领域社交——3.2.2 电商场景(1)
《云上社交行业技术服务白皮书》——第三章 云上社交典型场景与架构——3.2 细分领域社交——3.2.2 电商场景(1)
576 0
|
Cloud Native 对象存储 数据安全/隐私保护
带你读《企业级云原生白皮书项目实战》——3.2.1 ACR容器镜像服务(2)
带你读《企业级云原生白皮书项目实战》——3.2.1 ACR容器镜像服务(2)
306 0