什么时候使用纯虚函数
某些类,在现实角度和项目角度都不需要实例化(不需要创建它的对象),这个类中定义的某些成员函数只是为了提供一个形式上的接口,准备上子类来做具体的实现。此时这个方法就可以定义为“纯虚函数”,包含纯虚函数的类,称之为抽象类。
纯虚函数的使用方法
使用 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行的代码,子类继承抽象类后, 如果子类不重写父类的纯虚函数,那么子类也将会变为抽象类。子类需要重写这个函数,做具体实现。
=========================================================================================================================
原文链接: https://www.cnblogs.com/CooCoChoco/p/12624183.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/339639
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!