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

abc515952853 2012-05-05 06:42:57
前几天有个同学去面试,面试技术员问了个问题,什么时候用多态,把他问闷了,他说他知道多态的条件,什么是多态,就是不知道怎么说什么时候用多态。。。我发现这个问题我也回答不上来,求指教啊~~~
...全文
601 19 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
貌似是复制构造函数时用到吧
1. Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 8 2、Java有没有goto? 8 3、&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量中能不能存贮一个中文汉字?为什么? 9 8、用最有效率的方法算出2乘以8等於几? 10 9、请设计一个一百亿的计算器 10 10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11 11、"=="和equals方法究竟有什么区别? 12 12、静态变量和实例变量的区别? 13 13、是否可以从一个static方法内部发出对非static方法的调用? 13 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 14 16、下面的代码有什么不妥之处? 14 17、请出作用域public,private,protected,以及不写时的区别 14 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 15 19、构造器Constructor是否可被override? 16 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 16 21、写clone()方法时,通常都有一行代码,是什么? 16 22、面向对象的特征有哪些方面 17 23、java中实现多态的机制是什么? 18 24、abstract class和interface有什么区别? 18 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 20 26、什么是内部类?Static Nested Class 和 Inner Class的不同。 20 27、内部类可以引用它的包含类的成员吗?有没有什么限制? 22 28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 23 29、super.getClass()方法调用 23 30、String是最基本的数据类型吗? 24 31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 24 32、是否可以继承String类? 25 33、String s = new String("xyz");创建了几个String Object? 二者之间有什么区别? 25 34、String 和StringBuffer的区别 25 35、如何把一段逗号分割的字符串转换成一个数组? 26 36、数组有没有length()这个方法? String有没有length()这个方法? 26 37、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"; 26 38、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 27 39、下面的程序代码输出的结果是多少? 28 40、final, finally, finalize的区别。 30 41、运行时异常与一般异常有何异同? 30 42、error和exception有什么区别? 30 43、Java中的异常处理机制的简单原理和应用。 30 44、请写出你最常见到的5个runtime exception。 31 45、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗? 32 .... ....

64,648

社区成员

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

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