究竟何为“多态”?为什么要使用“多态”?

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程序也可以运行,为什么要用多态呢??

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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