◆→"重载"一词是否有两个以上的意思?

jimconrad 2002-05-09 06:57:01
在c++教科书中,重载大概被解释为:C++允许在相同作用域中以相同的名字定义不同的函数,只要它们的参数(数量或类型)不同。

另一个重载是指操作符重载,在类内部对内建的操作符进行重定义:
With C++, you can redefine the function of most built-in operators. These operators can be redefined, or “overloaded,” globally or on a class-by-class basis. Overloaded operators are implemented as functions and can be class-member or global functions.

那么上面就有两层意思了:
1.在“相同”或“同一”或“same”的作用域内同一名称不同函数的现象称为重载,比如一个类内部有两个构造函数。
2.在一个大的作用域内包含的另一个小的作用域内,对大作用域的某个函数、运算符进行重定义的现象。

还有一个经常被人称为“重载”的意思就是:比如“重载基类的虚函数”中的“重载”。这里的重载其实是实现的意思;如果该虚函数贯穿的不只一个派生层次,其实也可以理解为“重定义”,即将父类中该函数的实现覆盖掉,重新写一个。那么这里的重载其实是描述“多态”的一个术语。

于是“重载”一词至少应当有三个意思。是吗?如果有面试官问:“什么是重载?”该作何回答?

如果我理解的概念有误,急盼指出,多谢!
...全文
111 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈硕 2002-05-10
  • 打赏
  • 举报
回复
jimconrad(jimmy) :
你的那两个function不存在“重载”与“覆写”的关系,这两个函数基本没关系。
如果你在 MyClass的scope那调用function,会调用MyClass::funtion(), 它隐藏(hide)了全局(global)的那个function()

Effective C++ Item 37:
Never redefine an inherited nonvirtual funcion.

Effective C++ Item 38:
Never redefine an inherited default parameter value.
jimconrad 2002-05-10
  • 打赏
  • 举报
回复
但是我还有另一个想法:
归纳起来重载是指同一个做用域内的事情,覆盖是属于类继承中的事情。以此为准判定操作符不属于重载,是重定义,属于覆盖!因为一个类对操作符重定义,而这个类可以不是任何类的派生类。
jimconrad 2002-05-10
  • 打赏
  • 举报
回复
有一种情况,如下代码:

void function(int i);
class MyClass
{
public:
int i;
void function(int i);
}

void function(int i)
{
return;
}

void MyClass::function(int i)
{
return;
}

这里的function函数到底是属于重载还是覆盖?

(我的想法:既然操作符重定义称为操作符重载,那么这里function应该是重载哦。试试把这个function改为操作符--c++中视为函数,那么我的想法应该是对的。是吗?)
liushmh 2002-05-09
  • 打赏
  • 举报
回复
不要太想多了,c++的出现是为了让编程方便, 所以关于重载,你大可以认为如何
好理解就如何理解。
redwood 2002-05-09
  • 打赏
  • 举报
回复
通常,自然语言中的一个词可以代表许多种不同含义,需要依赖上下文来确定。这就是所谓的一词多义,反映到程序中就是重载。例如,我们说搽皮鞋,搽桌子,搽车,都用了一个 “搽”字,但是方法就不同了,人类可以完全可以理解这样的语言,因为我们懂的这个“搽”字,懂得了不同的 “搽”法,所以我们不会说用搽桌子的方法搽车,那就太傻了,c++就提供了这样的方法,使我们在编程时可以对不同的功能赋予相同的函数名,其余的就让编译器来做了
Jinglihui 2002-05-09
  • 打赏
  • 举报
回复
同意solstice(大佛)
从你的描述看,你对重载已经理解得很好了:)
陈硕 2002-05-09
  • 打赏
  • 举报
回复
Overloading Function和Overloading Operator都是"重载",港台称“多载化”
Override Virtual Function是“改写”、“覆写”虚函数,与“重载”无关,想必是当年大陆最初翻译C++书的人眼睛看花了,把override看成overload了。
zniu 2002-05-09
  • 打赏
  • 举报
回复
there are 2 meanings of that, one is 'overload', another is 'override'

but they were translated into the same word in chinese by most people.

69,382

社区成员

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

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