Return to the Basic - 纯虚函数(pure virtual)和抽象类(abstract class)

纯虚函数(pure virtual function)是指在基类中声明但是没有定义的虚函数。
通用形式:

virtual type func-name(parameter-list)=0;


其中,type 是函数的返回类型,
func-name 是函数名。
=0 是把虚函数制定为纯虚函数。

通过虚函数申明为纯虚函数可以强制在派生类中重新定义虚函数。(否则编译器报错)

如果一个类至少含有一个纯虚函数,那么这个类被称为抽象类(abstract class).
- 抽象类的重要特征:不能定义抽象类型的对象,抽象类只能作为其他类的基类,不能用来声明对象。
- 抽象类可以用来声明指针或者引用,并以此支持运行时对态。

//这个程序编译报错,因为circle类没有覆盖show_area(); 
#include <iostream>
using namespace std;

class figure{     //基类为抽象类.(因为包含了纯虚函数)
protected:
 double x,y; 
public:
 void set_dim(double i,double j){
  x=i;
  y=j;
 }
 virtual void show_area()=0; //纯虚函数.
};

class triangle:public figure{

public:
 void show_area(){
  cout<<"Triangle with base "<<x;
  cout<<" and height "<<y;
  cout<<" has an area of "<<x*y*0.5<<".\n";
 }
};

class rectangle:public figure{

public:
 void show_area(){
  cout<<"Rectangle with dimensions ";
  cout<<x<<","<<y;
  cout<<" has an area of ";
  cout<<x*y<<".\n";
 }
};

class circle:public figure{
 //没有重新定义函数show_area(),产生错误.
};
int main(){
 figure *p;    //声明基类的指针
 triangle tri_obj;   //声明派生类对象
 rectangle rect_obj;

 circle cir_obj; //非法-不能被创建

 p=&tri_obj;
 p->set_dim(6.0,8.0);
 p->show_area();   //将显示三角形面积 24

 p=&rect_obj;
 p->set_dim(10.0,3.0);
 p->show_area();   //将显示长方形面积 30

 return 0;
}


编译结果:

 error C2259: 'circle' : cannot instantiate abstract class
       due to following members:
        'void figure::show_area(void)' : is abstract

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值