纯虚函数形式
virtual 类型 函数名(参数表)=0
一个具有纯虚函数的基类称为抽象类
例如
class shape; //抽象类
{
point center;
.....
public:
point where(){return center;}
void move(point p){enter=p;draw();}
virtual void rotate(int)=0; //纯虚函数
virtual void draw()=0; //纯虚函数
};
。。。。。
shape x; //error,抽象类不能建立对象
shape *p; //ok,可以声明抽象类的指针
shape f(); //error,抽象类不能作为返回类型
void g(shape); //error,抽象类不能作为参数类型
shape &h(shape &); //ok 可以声明抽象类的引用
实战演练
#include<iostream>
using namespace std;
//面向抽象类编程(面向一套预先定一好的接口编程)
//解耦合。。。模块的划分
class Figure//抽象类
{
public:
//阅读一个统一的界面(接口),让子类使用,让子类必须去实现
virtual void getArea() = 0;//纯虚函数
protected:
private:
};
class Circle :public Figure
{
public:
Circle(int a, int b)
{
this->a = a;
this->b = b;
}
virtual void getArea()
{
cout << "圆形形的面积:" << a*b*3.14<<endl;
}
protected:
private:
int a;
int b;
};
class tir :public Figure
{
public:
tir(int a, int b)
{
this->a = a;
this->b = b;
}
virtual void getArea()
{
cout << "三角形形的面积:" << a*b / 2 << endl;
}
protected:
private:
int a;
int b;
};
class square :public Figure
{
public:
square(int a, int b)
{
this->a = a;
this->b = b;
}
virtual void getArea()
{
cout << "平行四边形的面积:" << a*b << endl;
}
protected:
private:
int a;
int b;
};
void howtoplay(Figure *base)
{
base->getArea();
}
void main()
{
//Figure f; 抽象类不能被实例化
Figure *base = NULL;
Circle c1(10, 20);
tir t1(20, 30);
square s1(30, 40);
howtoplay(&c1);
howtoplay(&t1);
howtoplay(&s1);
}