纯虚函数与抽象类

来源:互联网 发布:烈焰遮天 源码 双端 编辑:程序博客网 时间:2024/06/01 10:39

1、纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本;

2、纯虚函数为各派生类提供一个公共界面(接口的封装设计);

3、纯虚函数说明形式:virtual  类型   函数名(参数表)= 0 ;

4、一个具有纯虚函数的基类称为抽象类。



定义一个抽象类,含有纯虚函数类叫做抽象类。
1、如果子类继承抽象类,只有把所有的纯虚函数都实现了,才能实例化。

2、抽象类可以定义普通的函数、变量。

3、接口类(抽象类)中只有函数原型定义,没有任何数据的定义。

class figure
{
public:
virtual void show_area() = 0 ;//纯虚函数
void printf()
{
    cout<<"test"<<endl;
}
protected:
double x;
double y;
};


class tri : public figure
{
public:
tri(double x= 1, double y = 2)
{
    this->x = x;
    this->y = y;
}
void show_area()
{
    cout<<"三角形面积:"<<x*y*0.5<<endl;
}
protected:
private:
};


class square  : public figure
{
public:
square(double x= 1, double y = 2)
{
    this->x = x;
    this->y = y;
}
void show_area()
{
    cout<<"四边形面积:"<<x*y<<endl;
}
protected:
private:
};


class circle  : public figure
{
public:
circle(double x= 1, double y = 2)
{
    this->x = x;
    this->y = y;
}
void show_area()
{
    cout<<"圆的面积:"<<3.14*x*x<<endl;
}
protected:
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)抽象类不能实例化(定义对象),但是可以定义抽象类指针(实现多态)。