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