Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)qq
published in(发表于) 2014/7/9 22:38:37
visual c++ 中抽象类与纯虚函数的用法

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;

当基类是抽象类时,只有在派生类中重新给出基类中所有纯虚函数的定义,该派生类才不会成为抽象类。




If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759