[工学]面向对象程序设计 多态性.pptVIP

  • 2
  • 0
  • 约1.17万字
  • 约 66页
  • 2018-02-15 发布于浙江
  • 举报
[工学]面向对象程序设计 多态性

但是,在面向对象程序设计领域,所谓多态性通常特指下述机制:派生类对象可以像基类对象一样使用,同样的消息既可以发送给基类对象也可以发送给派生类对象。 也就是说,在类等级的不同层次中可以共享一个行为的名字,但是不同层次中的类却各自按自己的需要来实现这个行为。 简而言之:在不同的类层次中,同一个消息被不同的对象接收,产生了不同的行为。当一个对象接收到发送给它的消息时,根据该对象所属于的类动态选用在该类中定义的实现算法。 多态性机制不仅增加了面向对象软件系统的灵活性,进一步减少了冗余信息,而且显著提高了软件的可重用性和可扩充性。 本章主要讲述,静态联编与动态联编,虚函数的声明与使用,虚函数应用实例,纯虚函数,多态性带来的好处等内容。 9.1 静态联编与动态联编 所谓联编(tinding),就是使一个计算机程序的不同部分彼此关联的过程。 静态联编在编译阶段完成,因为所有联编过程都在程序开始运行之前完成,因此静态联编也叫先前联编或早期联编。 编译程序在编译时并不确切知道应把发送到对象的消息和实现消息的哪段具体代码联编在一起,而是在运行时才能把函数调用与函数体联系在一起,则称为动态联编。 9.1.1静态联编 对重载函数的调用是在编译阶段完成联编的,有下述3种区分重载函数的方法: ⒈根据实参特征来区分。 ⒉使用作用域分辨符加以区分。 ⒊根据对象的类型来区分。 下面让我们看一个简单程序例子: #include stdafx.h #include iostream.h class Base { public: void Who() { cout I am base class\n; } }; class FirstDerived : public Base { public: void Who() { cout I am first derived class\n; } }; class SecondDerived : public Base { public: void Who() { cout I am second derived class\n; } }; void main() { Base base_obj; Base *p;//声明一个指向基类的指针P FirstDerived first_obj; SecondDerived second_obj; p = base_obj; p - Who(); p = first_obj; p - Who(); p = second_obj; p - Who(); first_obj.Who(); second_obj.Who(); } 9.1.2动态联编 如果随着指针P实际指向的对象不同,使用语句P-Who( );能够调用不同类中Who的相同版本,我们就可以用相同的界面P-Who( )访问函数Who的多个实现版本,从而也就能够在程序运行时告诉用户,当时指针P实际指向何类对象。 函数调用P-Who( )依赖于程序运行时P的值。虚函数提供的就是这样一种机制。把由指针调用的成员函数声明为虚函数,则声明为指向基类对象的指针,可以根据它在程序运行过程中当时实际指向的对象类型,通过动态联编调用相应类中的虚函数。 #include iostream.h class student { public: void calct() { coutstudent xuefeiendl; } }; class grastu:public student { public: void calct() { coutgrastu xuefeiendl; } }; void fn(student x) { x.calct(); } void main() { student s; grastu gs; fn(s); fn(gs); } 为了把成员函数Who声明为虚函数,我们把上述程序修改为: #include stdafx.h #include iostream.h class Base { public: virtual void Who() //定义Who()为虚函数 { cout I am base class\n; } }; class FirstDerived : public Base { public: void Who() { cout I am first derived class\n; } }; class SecondDerived : public Base { public: void Who() { cout I am

文档评论(0)

1亿VIP精品文档

相关文档