参考:http://blog.csdn.net/huangjing_whlg/article/details/27377503
“纯虚函数”是一种特殊的虚函数,是基类中只有声明,无(法实现)定义的虚函数。
含有纯虚函数的类称为“抽象类”
#ifndef PUREVIR_H
#define PUREVIR_H
#define PI 3.14159
namespace purev{
//一般闭合图形类
//含有“纯虚函数”的类称为“抽象类”
//1、“抽象类”没有完整的实现,故不能实例化,也不能创建它的对象,但可以定义它的指针变量和引用变量。
//2、“抽象类”中除了可以定义“纯虚函数”外,还可以定义非纯虚函数
class CClosedFigure{
public:
//由于一般闭合图形类的数据不知道如何表现,因此,它下面的这些函数都是无法实现的。
//但是,为了让指向派生类CCircle对象的基类CClosedFigure指针p的操作:p->Area()能够通过编译检查,基类中必须要有相应函数的声明。
//“纯虚函数”就是在基类中声明但是没有定义的虚函数:
virtual double perimeter() = 0;
virtual double Area() = 0;
};
//基类为“抽象类”的派生类都必须定义自己的,和纯虚函数同名的重载函数
//3、如果有没有定义的基类中的“纯虚函数”,则该类仍然为“抽象类”
class CCircle :public CClosedFigure{
private:
double r;
public:
CCircle(int rr);
double perimeter() ;
double Area() ;
};
}
#endif
#include "purevir.h"
using purev::CCircle;
CCircle::CCircle(int rr) :r(rr){}
double CCircle::perimeter(){
return 2 * PI*r;
}
double CCircle::Area(){
return PI*r*r;
}
#include <iostream>
#include "purevir.h"
using std::cout;
using std::endl;
using purev::CClosedFigure;
using purev::CCircle;
int main(){
CClosedFigure * p;
CCircle c(1);
p = &c;
cout << p->perimeter() << endl;
cout << p->Area() << endl;
return 0;
}