社区
非技术区
帖子详情
关于重载的问题
jackhu
2002-03-04 05:36:08
请教各位老师:
为何"int abs(int a);
double abs(double f);"
编译器可识别重载;
而"char f(char x);
int f(int x);"
不能重载?
...全文
23
24
打赏
收藏
关于重载的问题
请教各位老师: 为何"int abs(int a); double abs(double f);" 编译器可识别重载; 而"char f(char x); int f(int x);" 不能重载?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
school
2002-03-05
打赏
举报
回复
同名函数的参数不同(包括类型、顺序不同),那么容易区别出它们是不同的函数(重载函数)。同名函数仅仅是返回值类型不同,有时可以区分,有时却不能。
k_f
2002-03-05
打赏
举报
回复
char f(char a)
{
return a;
}
int f(int a )
{
return a;
}
在Dev-C++4.0下编译不过,显示错误
e:\temp\temp.cpp: In function `int main()':
e:\temp\temp.cpp:7: parse error before `{'
e:\temp\temp.cpp: At top level:
e:\temp\temp.cpp:16: parse error before `}'
标准C++究竟是怎么规定的
jackhu
2002-03-05
打赏
举报
回复
多谢楼上的各位老师指教!
tlovexyj
2002-03-05
打赏
举报
回复
gigix说得很全的,我就没什么好说的了。
spirix
2002-03-05
打赏
举报
回复
如果仅仅是两个返回值不同的话,是不可以重载的,比如:
int abs(int a);
double abs(double f);"
编译器可识别重载;
而char f(int x);
int f(int x);
编译器是不可识别重载的原因如下:
如果是返回值不同,在调用前编译器并不知道重载函数中的某个的返回值。打个比方:如果门外一个男人,一个mm,而你在不知道具体那个是mm的情况下对自己说,我只能让mm进来!你的想法存在二义性,因为只有当某个人进来了,你才知道是男是女。
gigix
2002-03-05
打赏
举报
回复
每个函数在编译器那里都有一个唯一的名字,编译器会根据函数所属的类、函数名、参数列表、const形态和自己的规则来生成这个名字。比如说,下面这个类:
class MyClass{
void MyFunction(int);
};
MyFunction这个函数在编译器那里的名字可能就是这样:
member_MyClass_void_MyFunction_int_nonConst
当然,这只是我的一相情愿。你可以看看VC编译器的输出结果,那里会有处理以后的函数名。另外可以看看《深度探索C++对象模型》,也有讲到这些。
在调用的时候就很简单了。因为每个函数实际上是有各自不同的名字的。假设我有这样两个重载方法(现在比较喜欢说“方法”,就是“函数”的意思):
void func1(int);
void func1(double);
当在client里面这样写:
int a = func1(2);
编译器就会知道,我传递给func1的是一个int型,它当然就会去调用那个接受int参数的重载函数了。
那么,为什么不能通过返回值重载呢?因为你可以根本不要返回值,你可以这样写:
func2();
那么谁知道func2的返回值是什么类型呢?谁都不可能知道。
jackhu
2002-03-05
打赏
举报
回复
感谢楼上各位老师指教,c++标准是不支持“同名函数仅仅是返回值类型不同”的重载,我在vc60下编译不能通过。我想知道编译器如果能通过重载,内部应是如何工作的?特别关注!!
piaorenqian
2002-03-05
打赏
举报
回复
关注
jackhu
2002-03-05
打赏
举报
回复
继续关注!!
jackhu
2002-03-05
打赏
举报
回复
感谢楼上各位老师指教,c++标准是不支持“同名函数仅仅是返回值类型不同”的重载,我在vc60下编译不能通过。我想知道编译器如果能通过重载,内部应是如何工作的?特别关注!!
windindance
2002-03-04
打赏
举报
回复
char f(char a)
{
return a;
}
int f(int a )
{
return a;
}
在UNIX下CC编译通过。
LANDFISH
2002-03-04
打赏
举报
回复
嗯,有道理,我也觉得应该是可以重载的。
windindance
2002-03-04
打赏
举报
回复
f(int)
zf925
2002-03-04
打赏
举报
回复
肯定不行!!!!!!!!!!
f(10)你说调用的是谁??????
snipersu
2002-03-04
打赏
举报
回复
应该行。你用的是啥编译器?
ty3310
2002-03-04
打赏
举报
回复
标C++
到底是过还是不过,
我怎么知道我用的IDE的编译器
是不是支持标准C++?
windindance
2002-03-04
打赏
举报
回复
标准C++:
int f();
char f();
//ERROR!!!参数相同
int f(int);
char f(char);
//OK:参数不同
tramp_man
2002-03-04
打赏
举报
回复
根据标准C++, 是应该过的!
wyzegg
2002-03-04
打赏
举报
回复
标准C++应该是
编译不过的
windindance
2002-03-04
打赏
举报
回复
char f(char a)
{
ShowMessage(a);
return a;
}
int f(int a )
{
ShowMessage(a);
return a;
}
可以重载。
BCB5.0下编译通过。
加载更多回复(4)
微服务系列第八季-Java中重写、
重载
及枚举
微服务应用是分布式开发的主要手段,它很好的解决了高并发等电商平台的
问题
。微服务系列课程是以Java语言为基础,以SpringCloud+SpringBoot为核心,结合Spring、SpringMVC及MyBatis,通过游戏案例、电商案例,以极简的方式,带领入门的朋友们快速上手微服务开发。全部案例源码分享给学习的朋友,案例采用敏捷开发管理模式,让朋友们在每一个阶段,有着游戏过关一样的学习体验。 第六季主要是给大家介绍一下Java中重写、
重载
及枚举。包括:Java中重写的概念、重写中super的使用、方法的重写规则、方法的
重载
概念、方法重写与
重载
的区别、枚举的概念、内部类中使用枚举、迭代枚举元素、在switch中使用枚举类、枚举的常用方法。
c++运算符
重载
问题
运算符
重载
问题
所谓
重载
,就是重新赋予新的含义。函数
重载
是对一个已有的函数赋予新的含义,使之实现新功能。 其实运算符也可以
重载
,实际上,我们常常在不知不觉之中使用了运算符
重载
。 运算符
重载
的方法是定义一个
重载
运算符的函数,在需要执行被
重载
的运算符时,系统就自动调用该函数,以实现相应的运算。 也就是说,运算符
重载
是通过定义函数实现的。运算符
重载
实质上是函数的
重载
。
重载
运算符的函数一般格式如下: 函数类型 operator 运算符名称(形参表列) { 对运算符的
重载
处理 }
重载
小规则1 C+
关于Python方法
重载
的
问题
关于Python方法
重载
的
问题
请记住!!!!!! 前方高能!!!! Python的构造方法不能
重载
!!! Python的构造方法不能
重载
!!! Python的构造方法不能
重载
!!! Python的构造方法不能
重载
!!! Python的构造方法不能
重载
!!! Python的构造方法不能
重载
!!! Python的构造方法不能
重载
!!! class Point: def __init__(self)...
运算符
重载
(看完这篇彻底掌握
重载
问题
)
运算符
重载
概述 什么是运算符
重载
运算符
重载
:用同一个运算符完成不同的运算功能。 C++运算符
重载
的相关规定如下: 1.不能改变运算符的优先级。 2.不能改变运算符的结合性。 3.默认参数不能和
重载
的运算符一起使用,也就是说,在设计运算符
重载
成员函数时不能使用默认函数。 4.不能改变运算符的操作数的个数。 5.不能创建新的运算符,只有已有运算符可以被
重载
6.运算符作用于C++内部提供的数据类型...
非技术区
15,440
社区成员
58,171
社区内容
发帖
与我相关
我的任务
非技术区
C/C++ 非技术区
复制链接
扫一扫
分享
社区描述
C/C++ 非技术区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章