Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)qqpublished in(发表于) 2014/7/9 22:38:37 visual c++ 中抽象类与纯虚函数的用法
visual c++ 中抽象类与纯虚函数的用法一般情况下,基类和派生类都可以用来创建对象,因为基类也定义了自己的属性和行为,但如果有需要,可以把基类定义为纯粹的一种抽象,即它的一些行为(成员函数)没有给出具体的定义。这种基类只能用于类的继承,并不能用来创建对象,这种类就称做抽象类。这个定义比较抽象,来举一个现实生活中的例子:“哺乳动物类”是一个基类,“猫类”、“狗类”都是“哺乳动物类”的派生类,读者可以说:“一只猫在叫”,因为这只在叫猫是真实存在的,它有着自己的实体。但读者如果说“一只哺乳动物在叫”就不太符合逻辑了,因为”哺乳动物”是一个抽象的概念,没有自己的实体。就像“哺乳动物”这样的类,就可以声明为抽象类,因为不会有“哺乳动物”这种会跑、会跳的动物出现,即它不会有实例。请看下面的例子:
#include "iostream.h"class mammal //哺乳动物{public:virtual void Call()=0; //哺乳动物不允许“叫”void Color(char * color); //颜色void Class(char * cClass) ; //种类char* GetColor();char* GetClass();private:char* m_Color; //记录哺乳动物的颜色char* m_Class; //记录哺乳动物的的种类};class Cat :public mammal //猫类{public:void Call();};class Dog :public mammal //狗类{public:void Call();};void mammal::Class(char * cClass) //各类的成员函数{m_Class=cClass;}void mammal::Color(char * color){m_Color=color;}char* mammal::GetColor(){return m_Color;}char* mammal::GetClass(){return m_Class;}void Cat::Call(){cout<<"喵喵!一只"<}void Dog::Call(){cout<<"汪汪!一只"<}void main(){Cat taotao; //"淘淘"是只波斯猫Dog benben; //"笨笨"是只黑色牧羊犬taotao.Class("波斯猫");taotao.Color("白色");benben.Class("牧羊犬");benben.Color("黑色");mammal *mam[2]={&taotao,&benben};for(int m=0;m<2;m++)mam[m]->Call();}
运行结果如图1所示。图1 运行结果这是一个很简单的使用抽象类的例子,在“哺乳动物”类中,并没有实际定义“叫”的动作,所以将成员函数写成“virtual void Call()=0;”,像这样没有具体实现的成员函数称为纯虚函数。纯虚函数是不能被调用的,仅仅提供了一个与派生类相一致的接口的作用。纯虚函数用virtual关键字声明,其一般格式如下:virtual <数据类型><成员函数名>(<参数列表>)=0;当基类是抽象类时,只有在派生类中重新给出基类中所有纯虚函数的定义,该派生类才不会成为抽象类。
赞