C++ 纯虚函数与抽象类——virtual 和纯说明符 “=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行的代码将会报错:

  C++ 纯虚函数与抽象类——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 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行的代码,子类继承抽象类后, 如果子类不重写父类的纯虚函数,那么子类也将会变为抽象类。子类需要重写这个函数,做具体实现。

 

 

 

 

 

 

 

 

 

 

 

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

 

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

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/339639

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午12:13
下一篇 2023年3月2日 上午12:13

相关推荐