C++中的什么是多态性,怎样才算是实现了多态性?

zm_speed 2001-10-25 11:29:01
加精
学C++,一直不懂多态性,高手请讲的详细点。
...全文
1565 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cowboy1114 2002-02-07
  • 打赏
  • 举报
回复
利用虚函数
holylaker 2002-02-05
  • 打赏
  • 举报
回复
堕胎的定义:一个接口,多种算法。
堕胎的形式:
1.虚函数
2.函数重载(overload)
3.模板
4.宏
...
不是只有虚拟继承才叫堕胎。
tiger_wkh52741 2002-01-06
  • 打赏
  • 举报
回复
多太性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,即用同样的接口访问
功能不同的函数,从而实现了一个接口,多种方法
coolmantis 2001-11-11
  • 打赏
  • 举报
回复
oooooo
demonsol 2001-10-27
  • 打赏
  • 举报
回复
一句话 玩通虚拟继承
code_tin 2001-10-27
  • 打赏
  • 举报
回复
少了一句
CALSS B:A
code_tin 2001-10-27
  • 打赏
  • 举报
回复
CLASS A::M
CLASS B::M
M就是多态的产物
aihen 2001-10-27
  • 打赏
  • 举报
回复
多态性
例,画是一个操作,他作用于一个对象圆,就画圆,作用于一个对象三角,就画三角,
whhif 2001-10-26
  • 打赏
  • 举报
回复
比如C中的?运算符
int main()
{
int a,b,c;
printf("please input the a and b:\n");
scanf("%d",&a);
scanf("%d",&b);
c=a>b?1:2;
printf("the c is %d",c);
return 0;
}
这里的c就是一个多态,
不要以为只有C++才有多态,
在这里C有可能是1也可能是2,
不能确定,只有在程序运行时,
才能确定C的值,这就是简单的多态,
但是这是多态性的基本特性,
在C++中,
多态可以用接口来实现,
即提供一些用途的公共端,
用C来实现,
即是两个结构来模拟:
typedef struct TagA
{
void fun1();
void fun2();
void fun3();
.
.
.
void funn();
}A;
typedef TagVirtualA
{
A *this;
}VirtualA;
在程序中可用:
int main()
{
VirtualA *PointA;
PointA->this->fun1();
PointA->this->fun2();
.
.
.
PointA->this->funn();
return 0;
}
此时,PointA即是这个结构的一个接口,
在程序中可用这个接口来实现不同的功能,
在C++中可以用继承来增加接口的功能,
即有若干个A结构,通过它是一个指针,
可以有不同的功能实现,
但只有在程序运行中才能确它是具体功能,
这就是多态.
firecloud 2001-10-26
  • 打赏
  • 举报
回复
多态性就是不同的对象对同一消息会有不同的反映,比如说对一个画消息,rect对象会画一个方形,而circle对象则会画一个圆。
gffly 2001-10-26
  • 打赏
  • 举报
回复
主要体现在了继承和函数重载
honey 2001-10-26
  • 打赏
  • 举报
回复
多态性举例说明:
比如水 可以变成冰,冰又可以融化成水,水又可以变成蒸汽。。。。蒸汽又可以分解成H2和 O2 。。。。。
honey 2001-10-26
  • 打赏
  • 举报
回复
任何物体或事物都可以有多种形态形式存在,这就是多态性。。。:)
zm_speed 2001-10-26
  • 打赏
  • 举报
回复
因为和同学讨论多态性,我们都持不同的意见。所以问问你们对多态性的理解。
Downwind 2001-10-25
  • 打赏
  • 举报
回复
看看Lippman是怎么说的 —— 以一个public base class的指针(或 reference),寻址一个
derived class object
kingofark 2001-10-25
  • 打赏
  • 举报
回复
推荐几本:

Stanley Lippman <Essential C++>,华中科技大学,中文版

Bjarne Stroupstrup <The C++ Programming Language se>(C++程序设计语言),高教,影印版

<Programming In C++>(C++程序设计),高教,影印版

Bruce Eckel <Thinking In C++>, www.bruceeckel.com, 英文版

<C++ Effective Object-Oriented Software Construction>(C++面向对象高效编程),人民邮电,中文版

<The Standard C++ Bible>(标准C++宝典),清华,中文版

《C++大学教程》,机械工业,中文版

《21天学通C++》,人民邮电,中文版

这些都是国内能买到的。你有其中任意一本,就可以学到多态的知识。

在这里我就不讲解了,因为打字很麻烦也没必要,不如你自己看些书(上面提到的书都讲得很清楚)



gigix 2001-10-25
  • 打赏
  • 举报
回复
去文档中心,看holyfire专栏去。
cwzhq 2001-10-25
  • 打赏
  • 举报
回复
举个例子:
以前, 实现了动物类, 并提供了个叫繁殖的接口, 以后就可以统一的对所有知名, 不知名,甚至基因新组的怪动物调用这个接口, 用动物基本类的指针指向具体动物就好了, 而各种动物相应的繁殖方法会被调用, 鸡还是下蛋, 不会直接生小鸡了.当然这个繁殖的接口必须用虚函数virtual 定义. 想了解实现的底层机制请看侯捷的深度探索c++对象模型
rick1126 2001-10-25
  • 打赏
  • 举报
回复
多态性按照我的理解是通过继承实现的, 针对同一个基类的不同派生类可以实现同一个虚函数的不同实现, 从状态空间讲就是派生的子类实现了基类状态空间的不同扩展得到同一个虚函数的不同形态, 至于多继承即同时继承两个子类就会发生编译错误.

// debugTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "afx.h"
#include "comutil.h"
#include "string.h"
#include "iostream.h"

void memTest()
{
//使用bstr_t类型转换
CString strTest = "Hello World";
bstr_t bsTest = bstr_t(strTest);

int nTest = 1;
bstr_t bsnTest = bstr_t("1");

}

void memCheck()
{

//内存泄漏测试
CMemoryState oldMemState, newMemState, diffMemState;
oldMemState.Checkpoint();

memTest();

newMemState.Checkpoint();
if ( diffMemState.Difference( oldMemState, newMemState ) )
diffMemState.DumpStatistics();

}

class base{
public:
virtual void mpoly() = 0;
};

class child1: public base{
public:
void mpoly(){ cout<<"This is child1's virtual function\n"; }
};

class child2: public base{
public:
void mpoly(){ cout<<"This is child2's virtual function\n"; }
};

class child12: public child1, child2{
public:
//覆盖!!!
void mpoly(){ cout<<"This is child12's virtual function\n"; }
};

void mpolyCheck()
{
child1 cd1;
child2 cd2;
child12 cd12;

cd1.mpoly();
cd2.mpoly();
cd12.mpoly();

}
int main(int argc, char* argv[])
{
mpolyCheck();
return 0;
}

69,369

社区成员

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

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