C++ 虚函数实现的运行时多态 貌似没什么好处啊

来源:百度知道 编辑:UC知道 时间:2024/06/11 13:02:45
大家说说,基类里面的公共接口函数定义为虚函数,这样各个派生类对此函数的重新实现,然后定义一个基类指针,比如:pa=&oa10;pa->display();pa=&oa11;pa->display();·····,但是,这样有什么好处呢,就为了可以使用pa->display();这样所谓的很简洁的用法吗?如果基类的display()不定义成虚函数,那也可以这样写:oa10.display();oa11.display();···虽然只是编译时多态,感觉比那个方法用起来更简洁呢·· 请有相同看法的和不同看法的人来说说···
例子中:oa10是a10对象,oa11是a11对象,a10和a11都是从a派生出的,pa是a类指针。

今天一个同学说了一句让我找到了相当好的答案:考虑一个函数形参是a类指针pa,而实参是a的各个派生类对象如oa10等等,这样有统一的形参接口在函数内处理所有不同类的实参对象,确实好处不小啊···

回复yan13567:和指针的其他好处没有什么关系吧··
回复 极天异云:我就是不太理解才问的呀!!
回复nebulaly:貌似有点道理,不过你再说详细点就好了

不一定要用指针!也可以用引用来作为接口参数!

多态:同一对象接受不同消息 做出不同反应..
你的意思为什么要引入多态,直接用对象来表示就行了对吧?
多态最大的优点就是引入了指针,而且能完整执行任何一个函数..
指针的优点就不用说了吧..
回忆一下 前面的数组时 引入指针,同样都可以用数组来表示对吧...
为什么要用指针:在想想数据结构 表 树等,用指针是否方便很多...

另:你问题不就是 本来可以直接用对象来表示(就是上面说的静态约束,书上的内容跟一楼差不多内容),为什么要用动态约束 也就是用指针来表示吗?所以我告诉你指针的好处啊..你同学说的 就只使用一个统一的接口 (在这里也是靠指针来实现) 也是书上的原话吧? 貌似你该看看书了..

如果不理解虚函数的运行时多态,就是根本不理解面对对象的好处。
建议楼主从实际出发,多看别人的有实际意义的代码加深理解。

LZ可以考虑下列两场景:

1、oa10是张三写的,3年后,张三早已离职,李四接手维护,需要实现oa11;
2、oa10是中国王二写的,只提供库,没有源代码,美国的赵五做项目,需要改动display()的功能。

或许,LZ会理解会什么要引入多态。

我也是个初学者,谨供参考哈。
当使用Virtual关键字时,其调用公共接口函数是根据指针pa所指向的对象类型进行调用的,它是在程序的“执行”时选择的,而不是在“编译”时就选择的,即“动态约束”,而oa10.display();oa11.display();的调用是在“编译”时就确定好的,属于“静态约束”,正确的函数调用应该是在执行时选择的,所以感觉上你那个方法更感觉,但事实上用Virtual虚函数才更好。