社区
C++ 语言
帖子详情
谁和我说说什么时候用多态啊
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
打赏
举报
回复
貌似是复制构造函数时用到吧
c#基础学习之
多态
最近在看一本书《你必须知道的.Net》,书涵盖的内容比较多,对于c#,.Net平台以往所学的零散东西有了慢慢的总结和新的认识。把一些基础的东西记录于此。 先
说
说
多态
吧: 1.基类继承式
多态
如书中所
说
,基类继承式
多态
的关键是继承体系的设计与实现。书中举了个简单的列子 代码如下: Files myFile=new WORDFile(); myFile.open(); myFile是一个父类Files变量,保持了指向子类WORDFile实例的引用,然后调用一个虚方法Open,具体的调用则决定于运行时而非编译时。从设计模式的角度看,基类继承式
多态
体现了一种IS-A方式,
安卓java读取网页源码-questions:自问自答
安卓java读取网页源码 questions 自问自答 待初答 注:认真对待每一个答案。 Java String、StringBuilder 和 StringBuffer 有什么区别 == 和 equals 和 hashCode 有什么区别
说
说
你对 final 修饰符的理解
说
说
你对泛型的理解 泛型中 extends 和 super 的区别 描述下 Java 中的异常处理机制 什么是 HashMap,描述下其实现原理 HashMap、Hashtable 和 HashSet 这三者有什么联系和区别 列举下 Java 的集合和继承关系
说
下你对抽象类和接口的理解,以及两者的相同点和不同点 父类的静态方法能否被子类重写 描述下类的加载机制
说
说
你对 Java 反射的理解 什么是动态代理 在 Java 中 wait、yield 和 seelp 方法的不同 描述下 Java 中的内存分配 什么是
多态
,实现
多态
的机制是什么 接口(Interface)与抽象类(Abstract Class)的区别 重写(Override)与重载(Overload)的区别 父类的静态方法能否被子类重写 静态属性和静
01-Java基础(面向对象+集合).docx
1. 请
说
说
面向对象的特征 面向对象主要包括封装、继承、
多态
、抽象。 封装,给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在 Java 当中,有 4 种修饰符: default、public、private 和 protected 。每一种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访问权限。 通过隐藏对象的属性来保护对象内部的状态。 提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展。 禁止对象之间的不良交互提高模块化。 继承,给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用行,也可以在不修改类的情况下给现存的类添加新特性。对于接口可以多继承, 但是对于类只能是单继承
多态
,是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个
多态
类型上的操作,可以应用到其他类型的值上面。 抽象,是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节来创建类。 2. 面向对象和面向过程的区别 面向过程7 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较
Java问题宝典2012版
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 .... ....
Java知识点.docx
Java知识点 什么是面向对象? 面向对象是种思煜,世间万物都可以看做一个对象,这里只讨论面向对象编程(OOP),Java是一个支持并发、基于类和面向对象的计算机编程语言。 面向对象软件开发关有以下优点: *代码开发模块化,更易维护和修改。 *代码复用性强。 *增强代码的可靠性和灵活性。 *增加代码的可读性。 请
说
说
面向对象的特征? 四点:封装、继承、
多态
、抽象。 一、封装 封装,给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在Java当中,有4种修饰符:default、public、private和protected。每一种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访问权限。 下面列出了使用封装的一些好处: *通过隐藏对象的属性来保护对象内部的状态。 *揣高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展。 *禁止对象之间的不良交互提高模块化。 二.继承 继承,给对象提供了从基类获取字段和方法的能力。 继承提供了代码的重用行,也可以在不修改类的情况 下给现存的娄添加新特性。
C++ 语言
64,648
社区成员
250,503
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章