将一个虚函数初始化为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;
}
}