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

Reading number is top 10 articles
sql,存储过程分页_[SQL,Server教程]
安装SQL,Server,2005的AdventureWorks_[SQL,Server教程]
用IHttpModule解决输入中文地址乱码问题(一)_[Asp.Net教程]
DataGridView控件和List绑定问题-怎么排序_[Asp.Net教程]
asp.net点击textbox自动清除其中文字_[Asp.Net教程]
GMap谷歌地图实现代码_[Asp.Net教程]
C#文件处理技术:文件的读取使用方法
使用ASP.NET,MVC,和LINQ建立一个简单的博客,-,Part,1_[Asp.Net教程]
一个获取SQL Server数据字典的经典SQL语句_[SQL Server教程]
数据仓库的概念_mssql学习_编程技术
Reading number is top 10 pictures
再发两张抽象画
含苞欲放的素颜美少女3
清醇靓丽的美眉
西游日记1
代沟,真好
何炅哥为中国人的平均工资鸣不平了
夕阳下的北京街道
Abdominal hit by iron--HangZhou best driver parking save passengers
日本小萝莉2
恶搞漫画1
Download software ranking
matrix1
传奇私服架设教程
都市狐狸姑娘传
终极变速大师Speeder3.26
Unix video tutorial6
C#与.NET技术平台实战演练
Unix video tutorial5
仙剑奇侠传98硬盘WINXP版
C#程序员参考手册
Unix video tutorial19
qq published in(发表于) 2014/7/9 22:40:30 Edit(编辑)
visual c++中类的多态性与虚函数

visual c++中类的多态性与虚函数

visual c++中类的多态性与虚函数

visual c++中类的多态性与虚函数

多态性是面向对象程序设计方法的一个重要特征,它主要表现在函数调用时实现“一种接口、多种方法”。C++有两种多态性:编译时多态性和运行时多态性,前面所介绍的“允许函数同名”属于编译时多态性,本节主要介绍运行时多态性。

运行时多态性是指当函数名、参数、返回值都相同时,程序在编译时是无法确定要调用的函数的,只能在程序运行时才能够确定下来。这种多态性是通过虚函数来实现的。

从前面学的内容可以知道,声明一个派生类对象,同时也自动声明了一个基类对象。派生类的对象可以认为是基类的对象,但基类的对象不是其派生类的对象。因此,C++允许一个基类对象的指针指向其派生类对象,但不允许一个派生类对象指向其基类对象。

请看下面的例子:



#include "iostream.h"
class BaseClass
{
public:
void Display();
};class DeriveClass : public BaseClass
{public:
void Display();
};
void BaseClass::Display()
{
cout<<"调用了基类的Dispaly成员函数。n";
};
void DeriveClass::Display() //重载
{
cout<<"调用了派生类的Dispaly成员函数。n";
}
void main()
{
BaseClass Base,*pBase;
DeriveClass Derive;
Base.Display();
Derive.Display();
cout<<"----------------------------------------n";
pBase=&Derive;
pBase->Display();
}

运行结果如图1所示。



图1 程序运行结果

从例子中可以清晰地看出,虽然将基类的指针指向了派生类,编译器调用的还是基类的成员函数Display()。而且,虽然在派生类中重载了基类中的同名函数,但只有通过对象调用时才能使用重载,如果使用基类指针指向派生类对象,然后通过指针调用成员函数,则无法调用指定的重载函数。

在一个类继承结构中,可以用一个函数(函数名、函数参数、返回值完全相同)表示不同的功能。例如:在一个图形类继承结构中,设CShape是所有的具体图形(如圆型、三角型)的基类,则函数调用语句pShape->Display()可以绘制一个圆型,也可以绘制三角形:矩形等。具体什么形状,取决于pShape所指的对象。这种运行时多态性是通过虚函数来实现的。

对上面的实例进行简单的修改,利用虚函数完成指定功能。



class BaseClass
{
public:
void virtual Display(); //改写成虚函数
};

…… //不用改变

运行结果如图2所示。



图2 运行结果

虚函数使得设计和实现易于扩充的系统变成可能。微软基类(MFC)使用大量的虚函数来实现类的行为的多态性,如常用的OnDraw()就是一个虚函数




添加到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.