C++程序设计之多态
1、多态的含义 多态(polymorphism)一词最初来源于希腊语polumorphos,含义是具有多种形式或形态的现象。 在程序设计领域,一个广泛认可的定义是“一种将不同的特殊行为和单个泛化记号相关联的能力”,这里的泛化记号其实指的就是函数名。
2、多态的意义 C++程序中允许大量的同名函数出现,体现出多态的使用价值。1、对不同的数据类型,采用相同或是相似的操作时,使用同名函数。2、在程序运行中,在某个环节要调用对象的一个特定的方法,而不管这个对象是由哪一个类创建的,这些类都支持这种方法。
3、多态的类型 C++程序中,按照实现机制,多态可以分为两种overloading C++语言允许函数重载和运算符重载,使用同样的函数名和同样的运算符来完成不同的数据处理与操作。overriding C++语言程序中允许存在有若干函数,有完全相同的函数原型,却可以有多种多样的相异的函数体。
4、 函数重载指的是,允许多个不同函数使用同一个函数名,但要求这些同名函数具有不同的参数表(当然,函数体的实现代码通常也不旎髂坑若同)。 系统对这种多态性,对同名函数的处理比较简单。在编译过程中就可以确定该函数与程序中的哪一段代码相联系,即在编译时就已确定函数调用语句对应的函数体代码,故称为静态联编(static banding)处理方式。
5、 C++语言程序中允许存在有若干函数,有完全相同的函数原型,却可以有多种多样的相异的函数体,这种现象称为函数的覆盖。 在编译阶段,系统是无法判断此次调用刂茗岚羟应执行哪一段函数代码。只有到了运行过程中执行到此处时,才能临时判断应执行哪一段函数代码,这种处理方式称为动态联编(dynamic banding)。
6、虚函数: 虚函数是C++语言中的重要概念。虚函数在编程中的灵活使用,可使程序具有更好的结构和可重用性。表现形式:virtual 返回类型 函数名 ( 参数表 ){…… };
7、虚函数常用于基类与派生类中
8、使用虚函数时,需要注意以下3点:1、说明某一函数成员为虚函数,方法是在说明前加关键字“virtual”。2、派生类中虚函数处的关键字virtual可以省略,但基类处的不可省3、调用虚函数时,系统对它将采用动态联编的方式进行处理。
9、使用动态联编时,确定要调用的函数有两种方式•通过类对象line ln1; circle cir1挢旗扦渌; triangle tri1;ln1.draw(); cir1.draw(); tri1.draw();•通过指针graphelem *pObj;line ln1; circle cir1; triangle tri1;pObj=&lin1; pObj->draw();pObj=&cir1; pObj->draw();pObj=&tri1; pObj->draw();
10、动态联编的基本步骤
11、虚函数的动态联编的实现,主要依赖于下面一些条件:1、基亿姣灵秀类CB 可有多个派生类CD1,CD2,……,CDn;2、CB 类指针pb 可以指向CB 的对象,也可以指向CD1,CD2,……CD荏鱿胫协n的对象;3、CB 类和CD1,CD2,……CDn 类可以有同样原型(而函数体各异)的函数成员f()(虚函数);4、运行着的程序根据查对当前指针pb所指向的对象是属于哪个类的,再决定到底执行哪个f()。
12、采用虚函数对于程序有益之处在于:1、可使程序简单易读。2、它使得程序模块间的独立性加强。3、增加了程序的易维护性。4、提高了程序中“信息隐藏”的等级。
13、抽象基类的概念是虚函数概念的自然引申,它是虚函数使用的一个更理想的形式。virtual函数原型=0;若在虚函数的原型后加上“=0”字样而替掉函数定义体(没有具体的实现),则这样的虚函数称为纯虚函数。virtual void print()=0;
14、含有纯虚函数的类称为抽象基类。抽象基类的设计意义在于: 基类并不是完整的类,它在程序中只起到一种框架的作用,它所包含的是与定积分计算相关的数据成员,和计算定积分的函数成员的格式:函数名,参数表,返回类型等等。