1. C++的设计者为什么要设计运行期多态性?既然"对象.类::成员函数()"这个形式能解决问题,C++的设计者为什么要设计一个多此一举的运行期多态性?2. 运行期多态性似乎是一种“假动态”,众所周知,非虚函数的调用指令,在程序被编译链接后,其调用指令包含一个链接器链接的“常量”地址,该“常量”地址就是此非虚函数的静态地址,这是所谓的静态的编译期的多态性,而动态的运行期多态性就真的是动态的吗?所谓的运行期多态性,无非就是在类的对象被构造时,编译链接器,或者装载器为对象构造一个虚函数表指针成员变量,此指针成员变量对外不可访问,此指针指向此对象的类族的虚函数表,而虚函数表中的一个个的虚函数实质上还是一个个静态的地址,只不过是通过一个中间指针,间接的调用,这样就变成动态的?这是一种假动态?3. 在实际的社会生产生活应用中,有没有什么实际的例子,实际的问题,必须不得不由虚函数出马来解决才能完成,而"对象.类::成员函数()"这样的形式是完成不了的实际的问题呢?大家有没有遇到过这样的问题呢?

解决方案 »

  1.   

    你可以问一下 C++ 之父 Bjarne Stroustrup。
      

  2.   

    你可以发邮件问一下 C++ 之父 Bjarne Stroustrup。
      

  3.   

    在实际的社会生产生活应用中,有没有什么实际的例子,实际的问题,必须不得不由虚函数出马来解决才能完成,而"对象.类::成员函数()"这样的形式是完成不了的实际的问题呢?大家有没有遇到过这样的问题呢?
    ==============
    前面的就不说了,只说这一个吧。举一个例子,你现在有一个图形类,有三个子类,分别是圆形,三角形和矩形。在一次显示过程中,有很多个这三个类的对象。为了方便处理,一般这些对象都是放在一个队列中的。如果没有虚函数,你如何方便地调用这三个类的DisPlay函数来显示它们呢?
      

  4.   

    看看楼上说的。没有运行时的多态你怎么实现?全在父类里写代码绘制不同的图形?那要类这个概念还有什么用?还要面向对象这个概念有什么用?直接把所有可能用到得代码都写在cobject里得了,且不说能不能实现,就是实现了数十万行的代码你怎么看?能看得明白么?面向对象是有他的问题,但我想作为4gl能被那么多人接受自然就是合理的。
    还有动态也好静态也好就是个称呼,只不过是为了和重载有个区分,没必要扣字,要我说我的电脑就呆在那没动,他里面的软件怎么动硬件动我都不知道,我就说他是静态的怎么了。
      

  5.   

    楼主提出这个问题,说明楼主确实在思考啊."对象.类::成员函数()"确实能解决很多问题.这也说明了楼主编程经验尚短.5楼举的例子,是老师上课一直讲的.虚函数所带来的方便不仅仅在于此.举个例子:我之前在开发一个传感器的接口,这种传感器类型是非常多,通常处理不同的情况都是switch,根据传感器的编号处理,但是随着发展传感器的类型会渐渐增多.要不停的去改源代码.这就非常麻烦了.用虚函数定义这么一个玩样.以后传感器多了,多写这样一个函数体去实现就够了.楼主可以去看下设计模式方面的书籍
      

  6.   

    运行时多态是面向程序设计的基础,当然这个是对c++而言的。多态性不光是采用虚函数才能实现,通过模板或者void指针也可以实现多态,但是不可否认virtual带来的多态对于面向对象编程有着不可替代的意义。大家通常所言的面向对象编程或者面向接口编程,所需要的技术支撑正是由virtual实现的。java中有所谓的接口、抽象类等,那么对于c++而言就是virtual了。
      

  7.   

    请大家到这个贴子来讨论:http://topic.csdn.net/u/20101016/00/a7e0e9f1-7799-4a35-ac86-1be1e1739d17.html?59687