社区
C++ 语言
帖子详情
c++ 多态性如何理解??
gokiddo
2004-11-03 09:36:09
请问一下 c++ 多态性如何理解??
请高手说一下,不懂的话,帮我顶一下。
...全文
902
13
打赏
收藏
c++ 多态性如何理解??
请问一下 c++ 多态性如何理解?? 请高手说一下,不懂的话,帮我顶一下。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
freegitago
2004-11-05
打赏
举报
回复
我们同学举了一个经典的例子,就是上洗手间的问题(男女混合的洗手间不算)
上课时,有个同学举手说要请假去上洗手间,这是一个请求命令。抽象为一个函数
如果是女孩子发出,那么就去女WC;如果是男孩子发出,那么就去男WC。
同一个命令,根据不同的对象或者函数,执行不同的操作,这就是多态。
sondid
2004-11-05
打赏
举报
回复
类中的成员函数处理不同类型的数据时表现出来的能力
tgshsl
2004-11-05
打赏
举报
回复
C++的多态有两种,动多态,依靠对象的继承和虚函数实现。另外一种是动多态,依靠模板实现。对于复杂的模型可能要结合这两种方式
victortao
2004-11-04
打赏
举报
回复
多态性和虚函数紧密相连。
比如在基类和派生类中有一个同名函数。但是功能不同
那么在调用这个函数的时候,计算机到底调用那一个呢
就可以用虚函数或基类指针解决这个问题,这就是多态性
wxu2
2004-11-03
打赏
举报
回复
多态的意思简单的说就是一个接口多种调用
比如
int Max(int a,int b);
long Max(long a,long b);
//说明
int Max(int a,int b)
{
return ( (a>b)?a:b );
}
long Max(long a,long b)
{
return ( (a>b)?a:b );
}
main()
{
int x=10,y=20;
long I=10,J=20;
cput<<Max(x,y)<<endl;//调用INT类型的MAX函数
cput<<Max(i,j)<<endl;//调用LONG类型的MAX函数
}
编译器根据调用的时候传递的参数类型确定调用哪一个函数
wzj_1979
2004-11-03
打赏
举报
回复
老王头有三个儿子。在不同的工厂上班。分为ABC三个厂子。在A厂人家喊 老王头的儿子小王呢。大家知道是老大。在b厂人家喊老王头的儿子小王呢?大家知道是老二;在c厂人家喊,老王头的儿子小王呢?大家知道是老三。这就是多态。
pomelowu
2004-11-03
打赏
举报
回复
推荐两篇文章~~嗯~~准确地说是一篇:
http://dev.csdn.net/article/27/27528.shtm
http://dev.csdn.net/article/27/article/27/27529.shtm
dragonzxh
2004-11-03
打赏
举报
回复
打错
class A
{
public:
//.......
int Test
{
//........
}
};
class B::public A
{
public:
//.......
int Test
{
//........
}
};
void fn(A &x)
{
x.Test();
}
int main()
{
A s;
B bs;
fn(s);
fn(bs);
}
pomelowu
2004-11-03
打赏
举报
回复
对C++多态学习的一点感受
原创:郭萌 2002年9月3日
多态考虑的是类与类之间的层次关系以及类自身内部特定成员函数之间的关系问题,是解决功能和行为的再抽象问题。多态是指类中具有相似功能的不同函数是用同一个名称来实现,从而可以使用相同的调用方式来调用这些具有不同功能的同名函数。这也是人类思维方式的一种直接模拟,比如一个对象中有很多求两个数最大值的行为,虽然可以针对不同的数据类型,写很多不同名称的函数来实现,但事实上,它们的功能几乎完全相同。这时,就可以利用多态的特征,用统一的标识来完成这些功能。这样,就可以达到类的行为的再抽象,进而统一标识,减少程序中标识符的个数。
面向对象的多态性可以严格的分为四类:重载多态,强制多态,包含多态,和参数多态,前面两种统称为专用多态,而后面两种也称为通用多态。
包含多态是研究类族中定义于不同类中的同名成员函数的多态行为,主要是通过虚函数来实现。参数多态与类属(类模板)相关联,类属是一个可以参数化的模板,其中包含的操作所涉及的类型必须用类型参数实例化。这样,由类模板实例化的各类都具有相同的操作,而操作对象的类型却各不相同。
多态从实现的角度来讲可以划分为两类,编译时的多态和运行时的多态。前者是在编译的过程中确定了同名操作的具体操作对象,而后者则是在程序运行过程中才动态的确定操作所针对的具体对象。这种确定操作的具体对象的过程就是联编,也有的文献成为编联,束定或绑定。联编是指计算机程序自身彼此关联的过程,也就是把一个标识符名和一个存储地址联系在一起的过程;用面向对象的术语讲,就是把一条消息和一个对象的方法相结合的过程。按照联编进行的阶段的不同,可以分为两种不同的联编方法:静态联编和动态联编,这两种联编过程分别对应着多态的两种实现方式。
联编工作在编译连接阶段完成的情况成为静态联编。因为联编过程外程序开始执行之前进行的,因此有时也称为早期联编或前联编。在编译,连接过程中,系统就可以根据类型匹配等特征确定程序中操作调用与执行该操作代码的关系,其确定了某一个同名标识到底是要调用那一段程序代码。有些多态类型,其同名操作的具体对象能够在编译,连接阶段确定,通过静态联编解决,比如重载,强制和参数多态等。
和静态联编相对应,联编工作在程序运行阶段完成的情况称为动态联编,也称为晚期联编或后联编。在编译,连接过程中无法解决的联编问题,要等到程序开始运行之后再来确定,包含多态的操作对象的确定就是通过动态联编完成的。
下面我们们看看重载。
我们先看一个例子:
#include <iostream>
using namespace std;
class complex
{
public:
complex(double r=0.0, double i=0.0) {real=r;imag=I;}
complex operator +(complex c2); //运算符“+”重载成员函数
complex operator -(complex c2); //运算符“+”重载成员函数
void display();
private:
double real;
double imag;
};
complex complex::operator +(complex c2) //重载运算符函数实现
{
complex c;
c.real=c2.real+real;
c.imag=c2.imag+imag;
return complex(c.real,c.imag);
}
complex complex::operator –(complex c2) //重载运算符函数实现
{
complex c;
c.real=real-c2.real;
c.imag=imag-c2.imag;
return complex(c.real,c.imag);
}
void complex::display()
{
cout<<real<<imag;<<endl;
}
void main()
{
complex c1(5,4),c2(2,10),c3;
cout<<"c1="; c1.display();
cout<<"c2="; c2.display();
c3=c1-c2; //使用重载函数符完成复数减法
cout<<"c3-c2=";
c3.display();
c3=c1+c2; //使用重载函数符完成复数减法
cout<<"c3+c2=";
c3.display();
}
在本例中,我们把复数的加减法这样的运算重载为负数类的成员函数。可以看出,除了在函数声明及实现的时候使用了关键字operator之外,运算符重载成员函数与类的普通成员函数没有什么区别。在使用的时候,可以直接通过运算符,操作数的方式来完成函数调用,这时,运算符“+,-”原有的功能都不变,对整型数,浮点数等基本类型数据的运算仍然遵循C++预定义的规则,同时添加了新的针对复数运算的功能。“+”这个运算符,作用于不同的对象上,就会导致完全不同的操作行为,具有了更广泛的多态特征。
虚函数是动态联编的基础,属于包含多态类型。虚函数是非静态的成员函数,虚函数经过派生之后,在类族中就可以实现运行过程中的多态。
根据数值兼容性规则,可以使用派生来的对象代替基类对象。如果用基类类型的指针指向派生类,就可以通过这个指针访问到的之能是基类的同名成员;而如果将它设置为虚函数,则是用基类类型的指针就可以访问到该指针正在指向的派生类的同名函数。这样,通过基类类型的指针,就可以是属于不同派生类的不同对象产生不同的行为,从而实现了运行过程的多态。
dragonzxh
2004-11-03
打赏
举报
回复
例下:
class A
{
public:
//.......
int Test
{
//........
}
};
class B::public A
{
public:
//.......
float Test
{
//........
}
};
void fn(A &x)
{
x.Test();
}
int main()
{
A s;
B bs;
fn(s);
fn(bs);
}
dragonzxh
2004-11-03
打赏
举报
回复
就是运行时依据其类型确认调用函数,就是多态嘛
goodluckyxl
2004-11-03
打赏
举报
回复
http://community.csdn.net/Expert/topic/3426/3426426.xml?temp=.684765
以前写的 看看
xu123
2004-11-03
打赏
举报
回复
学习...
C/
C++
中文参考手册离线最新版
C/
C++
中文参考手册(
C++
23标准) 离线chm最新版是一份详尽的
C++
23标准参考手册,适用于
C++
程序员和开发人员。该手册提供了全面的
C++
23标准库和语言特性的介绍,包括语法、关键字、数据类型、控制结构、函数、指针、类和对象、继承、
多态性
、模板和异常处理等内容。 该手册以离线chm格式提供,方便用户在没有互联网连接的情况下查阅和使用。用户只需下载并安装该文件,即可在本地计算机上随时随地查看
C++
23标准的详细信息。 该手册还提供了大量的示例代码和实用的技巧,帮助用户更好地
理解
和应用
C++
23标准。此外,该手册还包含了
C++
23标准的最新更新和改进,帮助用户跟上最新的技术发展趋势。 总之,C/
C++
中文参考手册(
C++
23标准) 离线chm最新版是一份非常有价值的
C++
参考资源,适用于任何对
C++
编程感兴趣的人士。
C++
多态如何
理解
?实现
多态性
呢?
多态性
的作用呢?
C++
多态性
: 简单
理解
“一个接口,多种方法”。“允许将派生类类型的指针赋值给基类类型的指针” 将基类指针指向派生类对象,通过基类指针调用派生类的成员函数来执行不同的操作。
C++
多态性
的实现方法:
C++
多态性
是通过虚函数实现的。虚函数允许子类重新定义基类的成员函数。 实现方法有两种:重载和重写(也称覆盖)如果你想学习C/
C++
可以来这个群,首先是三三零,中间是八五九,最后是七六六,里面有...
浅谈
C++
多态性
C++
编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家详细介绍其中
C++
多态性
的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握。
多态性
可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。
C++
多态性
是通过虚函数来实现的,虚函数允许子类重新定
C++
多态性
的
理解
多态的含义: 多态的作用:
C++
中多态的方法:
C++
多态性
定义、实现以及示例详细介绍
C++
多态性
是面向对象程序设计中的重要概念,它允许子类对象具备父类对象的方法和属性。本文将详细介绍
C++
多态性
的定义、实现以及示例,帮助初学者更好地
理解
和掌握
多态性
。
C++ 语言
64,647
社区成员
250,476
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章