社区
C++ 语言
帖子详情
谁和我说说什么时候用多态啊
abc515952853
2012-05-05 06:42:57
前几天有个同学去面试,面试技术员问了个问题,什么时候用多态,把他问闷了,他说他知道多态的条件,什么是多态,就是不知道怎么说什么时候用多态。。。我发现这个问题我也回答不上来,求指教啊~~~
...全文
658
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
打赏
举报
回复
貌似是复制构造函数时用到吧
java继承和
多态
多态
,就是指方法多种状态,换句话
说
就是同一个方法会表现不同的的状态。
C++ 编译时
多态
和运行时
多态
前言
多态
多为C++的三大特性之一,我们对此的了解和应用大多停留在类继承层次和运行时阶段。那既然有运行(动态)时阶段,那是否也有静态的
多态
?有,那就是编译时
多态
正文 动态
多态
运行时的
多态
存在于继承类中,通过虚函数实现动态选择调用。简单的
说
就是通过一张虚函数表——vptable,vptable中记录了基类的虚函数地址,在派生类中继承了基类的这张vptable,而且在派...
静态
多态
和动态
多态
的区别
#include <iostream> using namespace std; class A { public: virtual void function() { cout << "I am A" << endl; } }; class B :public A { public: void function() { cout << "I used to be A but now I am B" << endl; } void fun
C++编译时
多态
和运行时
多态
多态
编译时
多态
运行时
多态
两种
多态
的优缺点 编译时
多态
编译时
多态
,又叫静态
多态
、早绑定。编译时
多态
基于template(模板)的具现化与函数的重载解析,这种
多态
在编译期进行,因此称为编译期
多态
。 1.模板具现化 以不同的模板参数具现化导致调用不同的函数,如下: class Animal { public : void shout() { cout << "发出动物的叫声" << endl; }; }; class Dog { public: void shout()
C++静态
多态
和动态
多态
静态
多态
和动态
多态
静态
多态
静态
多态
也称为编译时
多态
,即在编译时决定调用哪个方法; 静态
多态
一般是指方法重戟; 只要构成了方法重载,就可以认为形成了静态
多态
的条件; 静态
多态
与是否发生继承没有必然联系 如下所示: void test(int a){ cout << "1" << endl; } void test(int a,int y){ cout << "2" << endl; } void test(int a,int y,int z){
C++ 语言
65,212
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章