56纯虚函数与抽象类

简介: 56纯虚函数与抽象类

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

纯虚函数与抽象类

 

在C++中,纯虚函数是一种特殊的成员函数,它没有函数体,只有函数声明。纯虚函数的声明方式是在函数声明后面加上`=0`。纯虚函数的目的是让派生类必须实现这个方法,否则它们不能成为这个抽象类的子类。

 

抽象类是一种特殊的类,它至少包含一个纯虚函数。抽象类不能被实例化,只能被继承。抽象类的作用是提供一个接口规范,让派生类实现这个接口规范。

 

下面是一个简单的示例代码,演示了如何定义和使用抽象类和纯虚函数:

 

#include <iostream>
using namespace std;
 
// 抽象类 Shape
class Shape {
public:
    virtual double area() = 0; // 纯虚函数
};
 
// 派生类 Rectangle
class Rectangle: public Shape {
public:
    double width;
    double height;
    Rectangle(double w, double h): width(w), height(h) {}
    double area() override { return width * height; } // 重写虚函数
};
 
// 派生类 Circle
class Circle: public Shape {
public:
    double radius;
    Circle(double r): radius(r) {}
    double area() override { return 3.14 * radius * radius; } // 重写虚函数
};

 

在上面的例子中,我们定义了一个抽象基类`Shape`,它包含一个纯虚函数`area()`。然后我们定义了两个派生类`Rectangle`和`Circle`,它们都继承自`Shape`并实现了`area()`函数。由于`Shape`是抽象类,所以它不能被实例化,只能被继承。通过这种方式,我们可以定义一个接口规范,让派生类来实现这个接口规范。这种方式可以让我们的代码更加灵活和可扩展,因为它允许我们在不知道对象的确切类型的情况下使用对象。

目录
相关文章
|
机器学习/深度学习 算法 安全
【加密算法】RSA非对称加密算法简介
【加密算法】RSA非对称加密算法简介
|
iOS开发
解决App Installation failed, No code signature found.
解决App Installation failed, No code signature found.
650 0
|
10月前
|
敏捷开发 人工智能 安全
通义灵码+DeepSeek-R1:AI编程助手的新标杆?
通义灵码与DeepSeek-R1模型的深度集成,重新定义了AI编程工具的边界。该组合通过“大模型+垂直优化”技术路线,显著提升开发者效率。实测显示,在代码生成、上下文理解、缺陷检测等方面表现优异,函数补全响应时间仅0.8秒,内存占用减少41%,编码时间节省35%。适用于敏捷开发、系统重构等场景,尤其适合中小型研发团队和全栈开发者。
|
自然语言处理 JavaScript 前端开发
静态文档网站生成神奇器:VuePress!尤雨溪的旧爱!
【10月更文挑战第3天】静态文档网站生成神奇器:VuePress!尤雨溪的旧爱!
静态文档网站生成神奇器:VuePress!尤雨溪的旧爱!
|
存储 监控 Linux
在 CentOS 7 上如何对未使用的硬盘进行分区、格式化和挂载的最佳实践,包括准备工作、创建分区、格式化分区、创建挂载点、挂载分区及最佳实践建议
【10月更文挑战第8天】本文详细介绍了在 CentOS 7 上如何对未使用的硬盘进行分区、格式化和挂载的最佳实践,包括准备工作、创建分区、格式化分区、创建挂载点、挂载分区及最佳实践建议,旨在有效管理和利用服务器磁盘资源,提升系统稳定性和可维护性。
568 1
|
人工智能
[AI Google] 三种新方法利用 Gemini 提高 Google Workspace 的生产力
Workspace 侧边栏中的 Gemini 现在将使用 Gemini 1.5 Pro,新的 Gemini for Workspace 功能即将登陆 Gmail 移动应用,等等。
[AI Google] 三种新方法利用 Gemini 提高 Google Workspace 的生产力
|
JavaScript 前端开发 API
【Django+Vue3 线上教育平台项目实战】构建高效线上教育平台之首页模块
在当今数字化教育浪潮中,构建一个高效且用户友好的线上教育平台至关重要。本博客将指导您使用**Django**作为后端框架,结合**Vue 3**的强大前端能力,快速搭建**平台首页的核心功能**,包括***导航栏、轮播图、侧边栏、标签栏及分类课程推荐***。我们将探讨前后端数据交互、Vue组件化开发等关键技术,轻松构建出既美观又实用的线上教育平台。
【Django+Vue3 线上教育平台项目实战】构建高效线上教育平台之首页模块
|
关系型数据库 MySQL 数据处理
实时计算 Flink版产品使用问题之任务无法实时同步MySQL到StarRocks中修改的数据,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
传感器 Web App开发 机器学习/深度学习
计算机视觉教程0-3:为何拍照会有死亡视角?详解相机矩阵与畸变
计算机视觉教程0-3:为何拍照会有死亡视角?详解相机矩阵与畸变
1467 0
计算机视觉教程0-3:为何拍照会有死亡视角?详解相机矩阵与畸变
|
供应链 Oracle 关系型数据库
Crystal Ball—甲骨文水晶球风险管理软件(概念以及实战——基础案例篇)(上)
Crystal Ball—甲骨文水晶球风险管理软件(概念以及实战——基础案例篇)(上)