1:纯虚函数和抽象类
1>纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本
2>纯虚函数为各派生类提供一个公共界面(接口的封装和设计、软件的模块功能划分)
3>纯虚函数说明形式:
virtual 类型 函数名(参数表)=0;
4>一个具有纯虚函数的基类称为抽象类
1>纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本
2>纯虚函数为各派生类提供一个公共界面(接口的封装和设计、软件的模块功能划分)
3>纯虚函数说明形式:
virtual 类型 函数名(参数表)=0;
4>一个具有纯虚函数的基类称为抽象类
话不多说,直接上代码:
#include <iostream>
using namespace std;
class Figure
{
public:
virtual void getArea() = 0; //纯虚函数
};
class Cricle :public Figure
{
public:
Cricle(int r)
{
this->r = r;
}
virtual void getArea()
{
cout << "圆形的面积:" << 3.14*r*r << endl;
}
private:
int r;
};
class Tri :public Figure
{
public:
Tri(int h, int d)
{
this->h = h;
this->d = d;
}
virtual void getArea()
{
cout << "三角形的面积:" << h*d / 2 << endl;
}
private:
int h;
int d;
};
class Squre :public Figure
{
public:
Squre(int w, int h)
{
this->w = w;
this->h = h;
}
virtual void getArea()
{
cout << "四边形的面积:" << w*h << endl;
}
private:
int w;
int h;
};
void showArea(Figure *base)
{
base->getArea();
}
int main(void)
{
Cricle c1(10);
Tri t1(10,20);
Squre s1(20,30);
showArea(&c1);
showArea(&t1);
showArea(&s1);
return 0;
}
编译运行,结果如下:
需要注意的是:
1>抽象类不可以建立对象; eg: Figure f1 //error
2>可以声明抽象类的指针; eg: Figure *f1 //ok
3>抽象类不能作为返回值类型; eg: Figure fun() //error
4>抽象类不能作为参数类型; eg: void fun(Figure) //error
5>可以声明抽象类的引用; eg: Figure & fun(Figure &f1) //ok
如果一个类不想成为抽象类,需要实现其基类所有的纯虚函数,否则就是抽象类。