纯虚函数和抽象类

简介: 纯虚函数和抽象类

什么时候使用纯虚函数:

某些类,在现实角度和项目实现角度,都不需要实例化(不需要创建它的对象),这个类中定义的某些成员函数,只是为了提供一个形式上的借口,准备让子类来做具体化的实现,此时,这个方法就可以定义为"纯虚函数",包含纯虚函数的类,就称为抽象类.

纯虚函数的使用方法:virtual 返回类型 函数名( ) =0;

#include<iostream>
#include<string>
using namespace std;
class Square {
public:
  Square(const string& color="white") {
    this->color = color;
  }
  //纯虚函数
  virtual double area() = 0;//求面积
private:
  string color;
};
class Circle :public Square {
public:
  Circle(const int radius=0,const string& color="white") :Square(color), r(radius) {};
  //等同于
  /*Circle(const int radius, string& color):Square(color) {
    this->r = radius;
  }*/
private:
  int r;
};

通过此代码可知:virtual double area()=0;为纯虚函数,所以Square类为抽象类.

Circle作为Square的子类,但在Circle类中并没有对其基类的纯虚函数进行实现,所以Circle类依旧为一个抽象类.

众所周知:抽象类不可以创建实例对象

当子类对其基类中的纯虚函数进行实现后,则子类不在是一个抽象类

#include<iostream>
#include<string>
using namespace std;
class Square {
public:
  Square(const string& color="white") {
    this->color = color;
  }
  //纯虚函数
  virtual double area() = 0;//求面积
private:
  string color;
};
class Circle :public Square {
public:
  Circle(const int radius=0,const string& color="white") :Square(color), r(radius) {};
  //等同于
  /*Circle(const int radius, string& color):Square(color) {
    this->r = radius;
  }*/
  double area() {
    return 3.14 * r * r;
  }
private:
  int r;
};
int main(void) {
  //Square s;
  Circle c(10);
  cout << "圆的面积: " << c.area() << endl;
  return 0;
}

运行结果:

纯虚函数的注意事项:

父类声明某纯虚函数后,那么他的子类:

(1)要么实现这个纯虚函数(通常)

(2)要么继续把这个纯虚函数声明声明为纯虚函数,这个子类也将成为抽象类

(3)要么对此纯虚函数不做任何处理,等效于(2)的情况(不推荐)

目录
相关文章
需求分析有点难,ChatGPT来帮你
使用ChatGPT辅助进行论坛Web页面搜索功能需求分析,生成PRD文档,包括改进搜索算法、高级搜索选项、搜索结果页面改进和响应时间优化。在分析阶段,关注了每个需求的细节,如关键词匹配、个性化推荐、用户界面设计和性能优化。作为测试工程师,提炼出测试点,包括异常场景测试,确保系统在各种条件下稳定运行。实践中强调明确需求、拆分任务、修正回复和角色定位。
|
JSON easyexcel Java
EasyExcel的简单使用
EasyExcel的简单使用,以及如何通过postman进行导入导出功能的调试
1652 1
|
SQL 存储 API
SqlAlchemy 2.0 中文文档(四)(3)
SqlAlchemy 2.0 中文文档(四)
262 3
|
9月前
|
机器学习/深度学习 存储 自然语言处理
《Peephole LSTM:窥视孔连接如何开启性能提升之门》
Peephole LSTM是LSTM的一种变体,通过引入窥视孔连接,使各个门(输入门、遗忘门和输出门)能够直接访问细胞状态,从而在门控决策中提供更多的上下文信息。这使得模型能更精准地保留和利用序列中的关键长期依赖关系,避免信息丢失,提升对复杂序列数据的处理能力,在语音识别、自然语言处理等领域表现出色。
303 15
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的优化算法及其应用
【10月更文挑战第8天】 本文将探讨深度学习中常用的优化算法,包括梯度下降法、Adam和RMSProp等,介绍这些算法的基本原理与应用场景。通过实例分析,帮助读者更好地理解和应用这些优化算法,提高深度学习模型的训练效率与性能。
799 63
|
10月前
|
存储 供应链 监控
反向海淘中下单、支付方式、订单、库存管理、物流与配送
反向海淘指海外消费者通过跨境电商平台购买中国商品。其流程包括:1) 海外消费者在支持多语言和货币的平台上选品、加入购物车并填写准确收货信息下单;2) 支付方式涵盖国际信用卡、第三方支付平台(如PayPal)、本地支付及电子钱包;3) 订单管理涉及订单确认、拣货包装、发货跟踪及售后处理,并通过数据分析优化库存与销售;4) 库存管理强调实时监控、多渠道同步、预警补货及滞销处理;5) 物流方案提供国际快递、邮政包裹、专线物流和海外仓等多种选择,确保全程跟踪和清关服务。
什么是复数
【10月更文挑战第12天】什么是复数
2323 1
|
小程序 前端开发 Android开发
微信小程序(van-tabs) 去除横向滚动条样式(附加源码解决方案+报错图)
微信小程序(van-tabs) 去除横向滚动条样式(附加源码解决方案+报错图)
912 1
|
存储 关系型数据库 数据库
数据的反规范化架构
【6月更文挑战第13天】 本文介绍数据库设计包括规范化和反规范化。优化设计和应用规范化规则确保高效且准确的数据存储。
437 2
数据的反规范化架构
|
机器学习/深度学习 人工智能 算法