M
majorsoft
Unregistered / Unconfirmed
GUEST, unregistred user!
多态性可以说是OOP(object-oriented programing)中最为显著的特性。
下面是我在学习C++中对"多态性"和"动态绑定"的理解。
一、多态性(Polymorphism)
定义是这样的,多态性指同一个操作作用在不同的对象上可以有不同的解释,并可以产生
不同的执行结果。 举一个例来理解它。先定义一个Tshape(图形)类,里面定义drew()"画
"这个方法(实际是这个方法的是用一个虚函数来实现的,在派生实际的类的时候,可以对
它进行重载),现在从这个Tshape类派生出Tcircle(圆)类和一个Tline类(直线),分别
创建一个对象circle和line,现在给这两个对象发同一操作"画",那么作用在circle上则"画"
圆,作用在line上则"画"直线,实际上它是这样实现的:通过把这个操作的消息发给不同的对
象时,每个对象将根据自己所属的类的draw()"画"的方法的定义去执行,从而产生不同的结果。
注意它并未这样表达:“如果你是一个Circle,就这样做;如果你是一个line,就那样做;
等等”。若那样编写代码,就需检查一个Shape所有可能的类型,如圆、直线等等。这显然是
非常麻烦的,而且每次添加了一种新的Shape类型后,都要相应地进行修改。实际上,我们只
需说:“你是一种几何形状,我知道你能将自己画,即draw();请自己采取那个行动,并自己
制所有的去控细节吧。”
二、动态绑定
与多态性密切相关的一个OOP特性就是"动态绑定(dynamic binding)",传统的编程语言把
函数(过程)调用放与目标代码的连接放在程序运行前进行(人们称之为"静态绑定"),而
动态绑定是把这个连接推迟到运行时才进行。就上个例子来说,在运行时,当发出消息(请
求对象draw()"画")时,circle圆和line直线分别根据将请求的操作和实现的方法(这个方
法在Tcircle和Tline分别有不同的定义)进行连接。
在C++和obeject pascal语言中,要求我们在定义方法时要用一个特殊的关键字来允许动
态绑定。在C++中,这个关键字是virtual
对面向对象的程序设计语言来说,它们用以实现多态性的方法叫作“动态绑定”。编译
器
和运行期系统会负责对所有细节的控制;
以上是我一些个人的看法。。欢迎大家交流看法。
转载:我的个人主页<a href=http://majorsoft.delphibbs.com>http://majorsoft.delphibbs.com</a>(E程序员论坛)
下面是我在学习C++中对"多态性"和"动态绑定"的理解。
一、多态性(Polymorphism)
定义是这样的,多态性指同一个操作作用在不同的对象上可以有不同的解释,并可以产生
不同的执行结果。 举一个例来理解它。先定义一个Tshape(图形)类,里面定义drew()"画
"这个方法(实际是这个方法的是用一个虚函数来实现的,在派生实际的类的时候,可以对
它进行重载),现在从这个Tshape类派生出Tcircle(圆)类和一个Tline类(直线),分别
创建一个对象circle和line,现在给这两个对象发同一操作"画",那么作用在circle上则"画"
圆,作用在line上则"画"直线,实际上它是这样实现的:通过把这个操作的消息发给不同的对
象时,每个对象将根据自己所属的类的draw()"画"的方法的定义去执行,从而产生不同的结果。
注意它并未这样表达:“如果你是一个Circle,就这样做;如果你是一个line,就那样做;
等等”。若那样编写代码,就需检查一个Shape所有可能的类型,如圆、直线等等。这显然是
非常麻烦的,而且每次添加了一种新的Shape类型后,都要相应地进行修改。实际上,我们只
需说:“你是一种几何形状,我知道你能将自己画,即draw();请自己采取那个行动,并自己
制所有的去控细节吧。”
二、动态绑定
与多态性密切相关的一个OOP特性就是"动态绑定(dynamic binding)",传统的编程语言把
函数(过程)调用放与目标代码的连接放在程序运行前进行(人们称之为"静态绑定"),而
动态绑定是把这个连接推迟到运行时才进行。就上个例子来说,在运行时,当发出消息(请
求对象draw()"画")时,circle圆和line直线分别根据将请求的操作和实现的方法(这个方
法在Tcircle和Tline分别有不同的定义)进行连接。
在C++和obeject pascal语言中,要求我们在定义方法时要用一个特殊的关键字来允许动
态绑定。在C++中,这个关键字是virtual
对面向对象的程序设计语言来说,它们用以实现多态性的方法叫作“动态绑定”。编译
器
和运行期系统会负责对所有细节的控制;
以上是我一些个人的看法。。欢迎大家交流看法。
转载:我的个人主页<a href=http://majorsoft.delphibbs.com>http://majorsoft.delphibbs.com</a>(E程序员论坛)