1、纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本;
2、纯虚函数为各派生类提供一个公共界面(接口的封装设计);
3、纯虚函数说明形式:virtual 类型 函数名(参数表)= 0 ;
4、一个具有纯虚函数的基类称为抽象类。
1、如果子类继承抽象类,只有把所有的纯虚函数都实现了,才能实例化。
2、抽象类可以定义普通的函数、变量。
3、接口类(抽象类)中只有函数原型定义,没有任何数据的定义。
class figure{
public:
virtual void show_area() = 0 ;//纯虚函数
void printf()protected:
{
cout<<"test"<<endl;
}
double x;};
double y;
{
public:
tri(double x= 1, double y = 2)protected:
{
this->x = x;
this->y = y;
}
void show_area()
{
cout<<"三角形面积:"<<x*y*0.5<<endl;
}
private:
};
class square : public figure
{
public:
square(double x= 1, double y = 2)protected:
{
this->x = x;
this->y = y;
}
void show_area()
{
cout<<"四边形面积:"<<x*y<<endl;
}
private:
};
class circle : public figure
{
public:
circle(double x= 1, double y = 2)protected:
{
this->x = x;
this->y = y;
}
void show_area()
{
cout<<"圆的面积:"<<3.14*x*x<<endl;
}
private:
};
//通过抽象类的 纯虚函数 接口约定 (公共界面的约定)来实现具体的业务模型的填充
//(比继承代码复用更好一个级别的,属于框架的设计)
void objShow(figure *pBase)
{
pBase->show_area();//纯虚函数
}
void main()
{
//figure f1; //直接用抽象类定义具体的对象,error
figure *pBase = NULL; // 抽象类可以定义指针
tri t1;
square s1;
circle c1;
objShow(&t1);
objShow(&s1);
objShow(&c1);
}
总结:
(1)绝大多数面向对象语言都不支持多继承;
(2)绝大多数面向对象语言都支持接口的概念;
(3)C++中没有接口的概念;
(4)C++中可以使用纯虚函数实现接口;
(5)接口类(抽象类)中只有函数原型定义,没有任何数据的定义。
(6)抽象类不能实例化(定义对象),但是可以定义抽象类指针(实现多态)。