社区
C语言
帖子详情
究竟何为“多态”?为什么要使用“多态”?
nuaalj
2001-06-20 08:24:00
...全文
445
15
打赏
收藏
究竟何为“多态”?为什么要使用“多态”?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
taosi
2001-06-21
打赏
举报
回复
估计不是c++编译器吧?
littleme741
2001-06-21
打赏
举报
回复
to nuaalj(小路):
至少我在VC6的环境下,去掉基类里面的virtual后,结果就不一样的。你用的是什么编译器?
hama
2001-06-21
打赏
举报
回复
不可能,去掉基类的virtual结果会不一样,我在vc里面实验过。
fhaibo
2001-06-21
打赏
举报
回复
去掉基类的virtual后
派生类的调用的是派生类的函数
去掉派生类的virtual后,由于编译器默认fn也是virtual因为其格式与基类的fn一样
这里有一个很重要的概念是基类的赋值兼容
nuaalj
2001-06-21
打赏
举报
回复
to littleme741():
我试着去掉任何一个“virtual”,结果都不变,还是那四行输出。
为什么??
taosi
2001-06-21
打赏
举报
回复
难说了…… ^&^
nuaalj
2001-06-21
打赏
举报
回复
我用的是TC++3.0呀,难道我的货有问题:)
chenshuishui
2001-06-21
打赏
举报
回复
VC6输出都是baseclass
Nicrosoft
2001-06-20
打赏
举报
回复
不好意思,更正:多态真正的意义在于“接口重用”。
Nicrosoft
2001-06-20
打赏
举报
回复
to eleck(代码制造):你说“但是他们分别还有自己的特性,这就是多态性”
我觉得有些问题。
我觉得派生类有自己的特性,这不是多态的特征。这是类的实例化、具体化,属于继承的范畴。
多态是基类指针被赋予不同派生类对象时所表现出不同的特性,多态真正的意义在于“接口继承”,即基类定义一套规范接口,或者再给出默认实现(当然,也可以不给出,即纯虚函数)
Nicrosoft
2001-06-20
打赏
举报
回复
对态的核心就是:能够将派生类对象的地址赋给基类类型指针。
为什么要使用多态?
为了“接口重用”!
eleck
2001-06-20
打赏
举报
回复
“多态”,你要从抽象数据类型来理解。比如,你定义一个基类是“狗”,然后你在你的后面的数据抽象中还要抽象出来“吃饭的狗”,“吃菜的狗”,这些类将继承“狗”基类的特性,但是他们分别还有自己的特性,这就是多态性。只有把基类狗的特征函数定义为虚拟的,这样后面才可以区分具体狗的特征。
taosi
2001-06-20
打赏
举报
回复
看看 thinking in c++
you will find answer!
littleme741
2001-06-20
打赏
举报
回复
你试试把基类中virtual去掉,结果都是
calling test(bc).
in Base class.
了。
你还是学学关于VTABLE的结构吧。
nuaalj
2001-06-20
打赏
举报
回复
还有一个问题:
#include <iostream.h>
class Base
{
public:
virtual void fn(){ cout<<"in Base class."<<endl; }
};
class SubClass:public Base
{
virtual void fn(){ cout<<"in SubClass."<<endl;}
};
void test(Base& b)
{
b.fn();
}
void main()
{
Base bc;
SubClass sc;
cout<<"calling test(bc)."<<endl;
test(bc);
cout<<"calling test(sc)."<<endl;
test(sc);
}
TC++3.0上运行输出:
calling test(bc).
in Base class.
calling test(sc).
in SubClass.
去掉其中任意一个“virtual”(或都去掉),程序输出结果不变。
有哪位能结合这个情况给我讲讲具有多态特性的函数与不具有多态函数之间的使用区别吗?
既然没有virtual程序也可以运行,为什么要用多态呢??
详解C++虚函数的工作原理
讨论静态绑定与动态绑定,首先需要理解的是绑定,
何为
绑定?函数调用与函数本身的关联,以及成员访问与变量内存地址间的关系,称为绑定。 理解了绑定后再理解静态与动态。 静态绑定:指在程序编译过程中,把函数...
Java基础知识面试题(2020最新版)
文章目录Java概述
何为
编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的...
何为
Java 中的
多态
?
Java 中的
多态
一般分为两种:重写式
多态
和重载式
多态
。 重载式
多态
,也叫编译时
多态
。也就是说这种
多态
再编译时已经确定好了。重载大家都知道,方法名相同而参数列表不同的一组方法就是重载。在调用这种重载的...
面向对象
何为
多态
?
摈弃教科书式回答,
多态
语义是多种形态的缩写,在面向对象编程的思想中,“万物皆对象”,那么我们知道,对象的行为和属性由模板类定义,而通过模板类(class or interface)我们可以控制对象在runtime的行为属性...
16.
多态
面向对象的三大特征之一:
多态
。
何为
多态
?如何
使用
多态
呢?抽象方法和抽象类有何特点?本文一一为大家分享
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章