首页 > 编程语言 > 详细

C++ 纯虚函数与抽象类——virtual 和纯说明符 “=0”

时间:2020-04-03 09:25:25      阅读:219      评论:0      收藏:0      [点我收藏+]

什么时候使用纯虚函数

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

 

纯虚函数的使用方法

使用 virtual 和纯说明符 “=0” 将方法定义为纯虚函数,所属的类将会变为抽象类:

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 class Shape
 7 {
 8 public:
 9     Shape(const string& color = "White")
10     {
11         this->color = color;
12     }
13 
14     virtual float area() = 0;        //virual 和 =0 将 area() 定义为纯虚函数,所属的类无法创建对象
15 
16 private:
17     string color;
18 };
19 
20 int main()
21 {
22     Shape A;                //Shape 无法创建对象,会报错
23 }

抽象类无法创建对象,如第22行的代码将会报错:

  技术分享图片

 

 

纯虚函数的正确用法

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 class Shape
 7 {
 8 public:
 9     Shape(const string& color = "White")
10     {
11         this->color = color;
12     }
13 
14     virtual float area() = 0;        //virual 和 =0 将 area() 定义为纯虚函数,所属的类无法创建对象
15 
16 private:
17     string color;
18 };
19 
20 class Circle:public Shape
21 {
22 public:
23     Circle(float radius = 0, const string& color = "White") :Shape(color), r(radius) {}
24     
25     //子类需要重写父类的纯虚函数,否则继承下来纯虚函数,Circle 也会变为抽象类
26     float area() { return 3.1 * r * r; }
27 
28 private:
29     float r;        //半径
30 };
31 
32 int main()
33 {
34     Circle c_1(10);
35     cout << c_1.area() << endl;
36 }

 

第26行的代码,子类继承抽象类后, 如果子类不重写父类的纯虚函数,那么子类也将会变为抽象类。子类需要重写这个函数,做具体实现。

 

 

 

 

 

 

 

 

 

 

 

=========================================================================================================================

 

C++ 纯虚函数与抽象类——virtual 和纯说明符 “=0”

原文:https://www.cnblogs.com/CooCoChoco/p/12624183.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!