• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

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

jimconrad 2002-05-09 07:01:33

在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.在一个大的作用域内包含的另一个小的作用域内,对大作用域的某个函数、运算符进行重定义的现象。

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

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

如果我理解的概念有误,急盼指出,多谢!
...全文
11 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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++中视为函数,那么我的想法应该是对的。是吗?)
回复
freelybird 2002-05-09
我来解释一下,很简单的:

1 重载overloading与覆盖overriding是两个不同的概念,但它们之间有共同之处

2 overloading是指函数名同名,但参数类型不同(可以是参数个数、顺序、类型不同)。
为什么可以C++编译器可以支持重载呢?其实原因就是:C++把函数编译成目标代码时,函数名称是一个复合体(函数名+参数类型+个数等等)

3 overriding是子类中以完全相同函数名及参数类型来覆盖父类中函数代码,

4 重载时,调用者根据参数去匹配相应的函数(实际上,它们是不同的函数) 而覆盖时,调用者根据对象去判断调用的函数(可以是静态束定或动态束定)

5 至于普通函数与操作符重载实际上没有什么本质区别,C++本来就把操作符当成函数来处理
回复
Lesily 2002-05-09
把你的理解说出来,你的面试一定没问题啦!
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-05-09 07:01
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……