首页 > 范文大全 > 正文

C++语言多态性的循序渐进教学方法研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇C++语言多态性的循序渐进教学方法研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:多态性是面向对象语言的关键技术,其使用方法是面向对象编程语言的教学难点之一。本文以应用实例为引导,循序渐进的介绍了c++语言中实现多态性的三种方式:重载函数方式,虚函数方式,抽象类方式,并给出了实例的相应代码实现,清晰明了的介绍了该教学难点。

关键词:多态;重载函数;虚函数;抽象类

一、引言

C++是一种继承了C语言的面向对象的程序设计语言。C++语言支持面向对象的程序设计,主要表现在它支持面向对象方法的三个主要特性:封装、继承、多态。多态指的是同一个函数名具有多种不同的实现,即不同的功能。多态性可描述为:将同一个消息发送给不同的对象时会产生不同的行为。这里的消息是指调用函数,不同的行为指函数的不同实现。多态是面向对象程序设计语言的一个难点,在教学过程过也是很多学生难以理解的知识点。从客观现实世界的直观形象引导会大大减轻多态学习的难度,本文用具体应用实例循序渐进的介绍C++语言中多态性的三种实现方式。

二、以重载函数方式实现多态

在C语言中,每个函数必须有一个唯一的名字。例如求一个数的绝对值,由于参数的数据类型不同,需要如下一组函数:int abs(int), long labs(long), double dabs(double)。这些函数的功能相同,都是求一个数的绝对值。但由于不同的函数名,调用起来很不方便。在实际的编程中,会碰到诸多这样的实例,因此考虑是否可以给这些函数起一个名字,只是它们各自的函数体不同,对应着不同类型的参数。在C++语言中,引进了重载函数,允许同一个函数名对应着不同的实现。

重载函数,由于待处理参数的类型或个数不同,编写一组功能不同而名字相同的函数,即允许同一个函数名对应着不同的实现。上例中的求绝对值,给上述求绝对值的函数起一个名字abs,上述三个函数表示如下:int abs(int), long abs(long), double abs(double)。这三个同名函数对应着不同的实现,即各自有自己的函数体。重载函数至少在函数的参数类型、参数个数和参数顺序上有所不同。根据重载函数的参数类型、参数个数和参数顺序的不同选择调用具体的函数实现。利用重载函数实现多态,在编译时就能确定哪个重载函数被调用的。

三、以虚函数方式实现多态

实际生活存在这样的例子:老板让所有员工在九点钟开始工作, 他只要在九点钟的时候说:“开始工作”即可,而不需要对销售人员说:“开始销售工作”,对技术人员说:“开始技术工作”,只要是员工就可以开始工作,他知道这一点就行了。至于每个员工,当然会各司其职,做各自的工作,可用int beginWork()函数来实现,但所有员工的beginWork()函数的返回值、参数个数、参数类型、参数顺序都相同,要实现的功能却不同,通过函数重载也解决不了此类问题,在C++中用虚函数来实现此类多态性。

虚函数是可有多种不同实现的非静态成员函数。即虚函数是在基类中被关键字virtual说明,并在派生类中重新定义的非静态函数。说明虚函数的格式如下:virtual 函数返回值类型 成员函数名(参数列表)。上述实例用虚函数实现如下:

运行结果为:

寻找潜在客户,推销产品!

分析碰到的技术问题,解决问题!

由上例可看出虚函数的作用是通过基类指针或引用访问基类和派生类中被说明为虚函数的同名函数。虚函数在编译的时候确定不了调用的具体函数实现,只有在运行时才能根据对象的类型确认调用哪个函数。基类中说明的虚函数,通常要在派生类中进行重新定义。如果派生类中没有对基类的虚函数重新定义,则派生类简单的继承基类的虚函数。

四、以抽象类方式实现多态

按上面的例子进行编程,所有类型都继承销售员工类,则销售员工自己特定的成员函数,比如“double 计算销售提成()”也都被技术员工继承下来了,虽然不影响技术员工的操作,但是随时间延续,销售员工类中成员函数越来越多,技术员工类中冗余的方法就越来越多了,有什么办法可以解决?C++中提供的解决方法是将基类定义一个抽象类,如员工类,在员工类中实现该类共有的操作。

抽象类是包含有一个或多个纯虚函数的类。纯虚函数是一种没有具体实现的虚函数。纯虚函数的作用是在基类中给派生类提供了一个函数名,为实现动态多态打下基础,派生类将根据自身需要给出纯虚函数的具体定义。抽象类是不能有实例对象的类,这样的类的唯一用途是被继承,由它作为一个类族的公共接口,反映该类族中各个类的共性。用抽象类实现上述实例的程序如下:

五、总结

多态的优点在于接口的统一,对不同的对象,只需要发出一个消息接口,不同的对象会根据自身的特点实施不同的动作。支持多态的编程语言具有灵活、抽象、行为共享的优势,很好的解决了应用程序函数同名问题。本文由浅入深、循序渐进的介绍了三种实现C++多态性的方式,辅已程序实例清晰明了的介绍了该教学难点。

参考文献

1.钱能.C++程序设计语言教程[M].北京:清华大学出版社,2002.

2.杨喜敏,孟岩.C++多态技术反思[J].程序员,2005,(11).

3.侯捷.深度探索C++对象模型[M].武汉:华中科技大学出版社,2002.

4.邵维忠,杨芙清.面向对象的系统分析[M].北京:清华大学出版社,1998.

5.谭浩强.c++程序设计(第二版)[M].北京,清华大学出版社,2005.

作者简介:

李景霞(1976—),女,博士,讲师,研究方向:服务计算,分布式计算。