All articles(网络文学目录) All Pictures(图片目录) All Softwares(软件目录)

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

Writer: qq Article type: Programming skills(编程技巧) Time: 2014/7/9 22:40:30 Browse times: 290 Comment times: 0

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


Head photo

Go homepage
Upload pictures
Write articles

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()就是一个虚函数





There are 0 records,
Comment:
Must be registered users to comment(必须是注册用户才能发表评论)

Disclaimer Privacy Policy About us Site Map
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.