在许多情况下,在基类中不能对虚函数给出有意义的定义,而把它说明为纯虚函数,它的定义留给该基类的派生类去做,所以,纯虚函数是一种特殊的虚函数。它的一般格式如下:
class 类名
{
virtual 类型 函数名(参数表)= 0;
...
};
例如,有如下程序:
#include <iostream>
#include <math.h>
using namespace std;
class base
{
protected:
int x, y;
public:
virtual void setx(int i, int j = 0)
{
x = i;
y = j;
}
virtual void disp() = 0; //定义纯虚函数
};
class square : public base
{
public:
void disp()
{
cout << "x=" << x << ":";
cout << "x square = " << x*x <<endl;
}
};
class cube:public base
{
public:
void disp()
{
cout << "x=" << x << ":";
cout << "x square = " << x*x*x <<endl;
}
};
class chpow:public base
{
void disp()
{
cout << "x=" << x << " y="<< y << ":";
cout << "pow(x,y) = " << pow(double(x),double(y))<<endl;
}
};
int main()
{
base *ptr;
square B;
cube C;
chpow D;
ptr = &B;
ptr->setx(5);
ptr->disp();
ptr = &C;
ptr->setx(6);
ptr->disp();
ptr = &D;
ptr->setx(3,4);
ptr->disp();
}
程序输出结果如下:
上述程序中,基类base说明了一个纯虚函数disp(),然后在base类的派生类square、cube和chpow中分别定义。该程序实现动态联编,因为disp()在运行时进行选择。