谁和我说说什么时候用多态啊

abc515952853 2012-05-05 06:42:57
前几天有个同学去面试,面试技术员问了个问题,什么时候用多态,把他问闷了,他说他知道多态的条件,什么是多态,就是不知道怎么说什么时候用多态。。。我发现这个问题我也回答不上来,求指教啊~~~
...全文
619 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
文人骚客 2012-05-05
  • 打赏
  • 举报
回复 1
多态性就是同一符号或名字在不同情况下具有不同的解释。。。多态有两种表现形式:编译时的多态和运行时的多态,编译时的多态一般通过函数重载来实现,而运行时的多态是通过虚函数来实现的。。。。
SucreKing 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]

当你用一个指针改变指向另一个类对象时,调用结果仍是该指针原来指向的类对象的内容,此时,就要用多态性解决此问题了;
即在基类和派生类中有相同函数时,在基类的该函数前加virtual,就行了。。。
[/Quote]
这样就体现了多态性的含义
SucreKing 2012-05-05
  • 打赏
  • 举报
回复
当你用一个指针改变指向另一个类对象时,调用结果仍是该指针原来指向的类对象的内容,此时,就要用多态性解决此问题了;
即在基类和派生类中有相同函数时,在基类的该函数前加virtual,就行了。。。
ken_scott 2012-05-05
  • 打赏
  • 举报
回复
为什么面试官总喜欢问这种问题? 上次被问: 别人的程序崩溃(有源码),猜测总可能引发问题的地方?
唉,难啊
SONG_CA 2012-05-05
  • 打赏
  • 举报
回复
我不讲理论,我讲一个应用场景:
有一个类CShape,里面有个DrawMyself(),用来在屏幕上输出自己的形状,圆的话就画圆,方的话就画方。你从一个文件读入10000个数据,然后显示在屏幕上。程序怎么设计:

A.
所有的图形都是CShape,所以我在DrawMyself()区别,根据图形的类型我来画不同的形状,于是在这里面有成对的Switch Case对。如果每一天我们增加了一种类型,咱么办,必须修改CShape中的DrawMyself()函数,所有的代码都在这里。当心,代码很多。

B。所有的图形都是CShape,但是不同的图形DrawMyself()输出不同。好,我使用派生类,于是CRectShape、CTriangleShpe、CCircleShape,CElipseShape就产生了,每个派生类都有自己的DrawMyself()函数,但这个函数功能是不一样的。

这样的好处显而易见,某天多了一种形状,你怎么办?增加一个派生类啊。你只修改这个派生类的代码,你根本不用去碰其它已经存在的、运行良好的代码。

当然了,上面只是一个简单的例子来说明多态,多态并不是单单为了修改代码方便。其实很多东西,单看理论高深莫测,其实用的多了,自然就理解了
iamnobody 2012-05-05
  • 打赏
  • 举报
回复
不告诉你
纸箱猪 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

首先,使用多态有"偷懒"之嫌,假如楼主写到一定量程序的时候觉得可以"偷懒"了,不妨使用多态,但是在达到这些量期间只要知道多态是什么就可以了,到时候你自然会想用它.这是一个过程,同时这只是我的一家只谈.
[/Quote]

赞同。代码量大了之后,有时会发现一些逻辑可以提取出来成为公共的部分,剩余的部分就自然而然地成为多态了。
忘世麒麟 2012-05-05
  • 打赏
  • 举报
回复
首先,使用多态有"偷懒"之嫌,假如楼主写到一定量程序的时候觉得可以"偷懒"了,不妨使用多态,但是在达到这些量期间只要知道多态是什么就可以了,到时候你自然会想用它.这是一个过程,同时这只是我的一家只谈.
纸箱猪 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

广义地,重载的确也算多态,不过它是一种静态意义上的多态,编译时确定,而非运行时确定的。通常C++中所讲的多态是一种动态意义上的多态,是运行时才能确定的。
[/Quote]

还有一种静态多态,是用模板实现的。但那属于更为高级的技巧,甚至可算是奇淫技巧。
pathuang68 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

想用的时候就用。
PS.重载也算多态。
[/Quote]

广义地,重载的确也算多态,不过它是一种静态意义上的多态,编译时确定,而非运行时确定的。通常C++中所讲的多态是一种动态意义上的多态,是运行时才能确定的。
FrankHB1989 2012-05-05
  • 打赏
  • 举报
回复
想用的时候就用。
PS.重载也算多态。
飞天御剑流 2012-05-05
  • 打赏
  • 举报
回复
什么时候用多态?这么简单的问题还用问??肯定是见到美女的时候哇!!
zO_Oz 2012-05-05
  • 打赏
  • 举报
回复
这么简单的问题还用说?当然是:
怀孕的时候
W170532934 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

1. 存在一个继承体系结构。如果不存在继承体系结构,那么所谓的多态就无从谈起
2. 在该继承体系结构中的所有类里面,均需要实现一个统一的函数接口,且该函数接口的行为在运行时才能确定这样的情形,就可以考虑使用多态
[/Quote]
++
还有没事别动多态的想法,多态会降低效率。具体的可以查看《深入探索C++对象模型》
pathuang68 2012-05-05
  • 打赏
  • 举报
回复
1. 存在一个继承体系结构。如果不存在继承体系结构,那么所谓的多态就无从谈起
2. 在该继承体系结构中的所有类里面,均需要实现一个统一的函数接口,且该函数接口的行为在运行时才能确定这样的情形,就可以考虑使用多态
纸箱猪 2012-05-05
  • 打赏
  • 举报
回复
什么时候用多态?当接口已经确定,但同一个接口在不同环境需要不同实现的时候。
abc515952853 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
貌似是复制构造函数时用到吧
[/Quote]这个。。和多态没关系吧
jeakeven008 2012-05-05
  • 打赏
  • 举报
回复
貌似是复制构造函数时用到吧

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧