All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
简洁实用的表单验证程序_JavaScript技术_编程技术
调用xsl来解析xml文档(js异步)_[XML教程]
SQL,Server,7.0,入门(三)_mssql学习_编程技术
网页HTML教程:建立有亲和力的超级连接_[Html教程]
.Net环境下基于Ajax的MVC方案_.net资料_编程技术
利用C#创建,IIS,站点并设置.NET,Framework版本为ASP.NET,2.0,的方法,二_[Asp.Net教程]
PHP中常用的几个 mysql 语句_[PHP教程]
GridView中绑定日期字段格式的定义_[Asp.Net教程]
SQL的一些函数_[SQL,Server教程]
PHP实例:PHP采集百度音乐程序_[PHP教程]
Reading number is top 10 pictures
白嫩丰满美女照片
The real super beauty7
Go to the national museum3
9.3阅兵全景图2-英雄连队梯队和外国方阵梯队
中国女孩大胆自拍,显露完美身材4
Abdominal hit by iron--HangZhou best driver parking save passengers
狗狗与主人神同步2
Valentine's day comes, send some cartoon
Beauty Sun Feifei
Small QiShu -- ShuangShuangPan1
Download software ranking
功夫熊猫2(上集)
Ashlynn Video2
徐若瑄成名作“魔鬼天使”
Boxer's Top ten classic battle6
Tram sex maniac 2 (H) rar bag16
Eclipse 4.2.2 For Win64
White deer villiage
Sora aoi - one of more PK
linux高级编程
SQL2000 For 4IN1
qq published in(发表于) 2014/7/9 22:38:37 Edit(编辑)
visual c++ 中抽象类与纯虚函数的用法

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;

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




添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.