纯虚函数和抽象类

简介: 纯虚函数和抽象类

什么时候使用纯虚函数:

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

纯虚函数的使用方法: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文档,包括改进搜索算法、高级搜索选项、搜索结果页面改进和响应时间优化。在分析阶段,关注了每个需求的细节,如关键词匹配、个性化推荐、用户界面设计和性能优化。作为测试工程师,提炼出测试点,包括异常场景测试,确保系统在各种条件下稳定运行。实践中强调明确需求、拆分任务、修正回复和角色定位。
|
前端开发 JavaScript 开发者
React:JSX语法入门
React:JSX语法入门
176 0
|
SQL 存储 API
SqlAlchemy 2.0 中文文档(四)(3)
SqlAlchemy 2.0 中文文档(四)
141 3
|
小程序 前端开发 Android开发
微信小程序(van-tabs) 去除横向滚动条样式(附加源码解决方案+报错图)
微信小程序(van-tabs) 去除横向滚动条样式(附加源码解决方案+报错图)
802 1
|
设计模式 数据库
java23种设计模式(1)-单例模式
java23种设计模式(1)-单例模式
137 0
|
运维 监控 微服务
Python基础笔记2-ruamel.yaml读写yaml文件
上一篇笔记记录了Python中的pyyaml库对yaml文件进行读写,但了解到ruamel.yaml也能对yaml文件进行读写,于是想尝试一下它的用法。