多态性(纯虚函数与抽象类)

来源:互联网 发布:淘宝描述不符怎么申诉 编辑:程序博客网 时间:2024/05/01 13:35

将一个虚函数初始化为0之后,该函数就变成了纯虚函数。如:

viurtual  double area() = 0;

这个虚函数是无任何的功能,不能直接来调用,因为它是抽象的,只有被子类继承并赋予功能后才可调用。一个类可以有多个纯虚函数,但是只要有一个纯虚函数给类就是抽象类。

抽象类只是一个概念,就如同人类一样,没有任何的功能,人类这个概念不能吃饭,不能睡觉,只有实体的人才可以具有以上的功能。再比如书中所提到的自行车,你是不能骑的,这只是一个概念。下面我们通过一个程序来说明纯虚函数与抽象类的应用。


#include<iostream>using namespace std;class shape{public:virtual double area() = 0;};class A :public shape //三角形公有继承{protected:double h,w;public:A(double H,double W){h = H;w = W;}double area(){return h*w/2;}};class B : public A//长方形共有继承于三角形{public:B(double H,double W):A(H,W)//构造函数{}double area(){return h*w;}};class C  :public shape //圆的继承与实现{protected:double radius;public:C(double r){radius = r;}double area(){return radius * radius * 3.14;}};void  main(){shape *s = 0;int choice = 0;while(choice < 9){bool quit = false;cout<<"(0)退出(1)三角形(2)长方形(3)圆"<<endl;cout<<"请选择";cin>>choice;switch(choice){case 0:quit = true;break;case 1:s = new A(5.0,6.0);cout<<"三角形面积"<<s->area()<<endl;break;case 2:s = new B(70.0,80.0);cout<<"长方形的面积"<<s->area()<<endl;break;case 3:s = new C(9.0);cout<<"圆的面积"<<s->area()<<endl;break;default:cout<<"请输入0到3的数字";break;}if(choice<4 && choice >0 )delete s;if(quit)break;}}




程序的执行的结果是: