Overload,Override和Overwrite
来源:互联网 发布:东方财富有几种软件 编辑:程序博客网 时间:2024/03/29 15:04
1 overload (重载)
同一作用域内,函数名相同,参数列表不同的多个函数,构成重载。
仅返回值类型不同,不足以构成重载函数,比如:
int Func(int iIndex); // —— ①
int Func(std::string strIndex); // —— ②
void Func(int iIndex); // —— ③
①和②形成重载,③则是非法函数。因为编译器在编译时,会将函数名结合参数列表做一定的转换,比如上述函数在编译器中对应的函数名可能为:
_Func_int // —— ①
_Func_string // —— ②
_Func_int // —— ③
注:这里的函数名转换仅是形象化表述,实际情况视不同的编译器而不同,比如在g++中,①可能会被转换为_Funcii,总之,编译器区分不同的函数,依赖两个元素:函数名和参数列表。
显然,编译器无法区分①和③,认为③是对①的重复定义错误。在 VC 中会报以下错误: -family: Book Antiqua;">error C2556: 'void __cdecl Func(int)' : overloaded function differs only by return type from 'int __cdecl Func(int)
2 override(覆写)
override是指在类继承结构中,子类对父类的virtual方法进行重新定义。举例:
#include<iostream>
using namespace std;
class CBaseClass
{
public:
// 父类虚函数
virtual int whoami()
{
cout << "this is CBaseClass!" << endl;
return 0;
}
};
class CSubClass : public CBaseClass
{
public:
// 对基类whoami函数的override
virtual int whoami()
{
cout << "this is CSubClass!" << endl;
return 0;
}
};
int main(int argc, char **argv)
{
CBaseClass objBase;
// 对基类 whoami 函数的调用
objBase.whoami();
CBaseClass *pClass = new CSubClass;
// 利用 C++ 多态,这里调用的是 CSubClass::whoami()
pClass->whoami();
delete pClass;
return 0;
}
上面代码的输出:
this is CBaseClass!
this is CSubClass!
override 是 C++ 多态实现的关键一环。
3 overwrite (重写)
翻了翻各种 C++ 著作,没发现对 overwrite 的描述。也就是说,在 C++ 中,没有 overwrite 这一说法(可能是我翻的不全,知道的朋友望不吝赐教)。
倒有人在解析 java 中的 overwrite ,这里一并提一下。
在相关描述中,称 overwrite 是指在类继承结构中,子类对父类方法的重写,完全覆盖掉父类的方法,也就是说是对非 virtual 方法的重写。
总结:overload--编译时多态,override--运行时多态,overwrite--子类重写父类的非虚函数
- overload,override和overwrite
- Overload,Override和Overwrite
- Overload,override和overwrite
- overload ,override 和 overwrite
- overload , override 和 overwrite
- Overload、Overwrite和Override
- C++:overload, override和overwrite
- C++中Overload、Overwrite和Override区别
- override、overwrite和overload的区别
- C# override overload overwrite
- C# override overload overwrite
- C# override overload overwrite
- Overload, Override and Overwrite
- C# override overload overwrite
- C# override overload overwrite
- Overload Override Overwrite
- override overwrite overload 区别
- Overload Overwrite Override
- Inside the C++ Object Model 学习笔记 第四章 函数语意学
- 简述linux中的rpm包和samba服务器
- FTP
- Servlet中的技术
- SQLServer 2k 数据类型转换 Oracle
- Overload,Override和Overwrite
- 模态对话框和非模态对话框区别
- 学会利用搜索引擎
- WPF新手实践4:MVVM Light Toolkit(四、Model、ViewModel和View)
- 手动布设陷阱链接
- WPF新手实践5:MVVM Light Toolkit(五、Command)
- 网通宽带更新密码的网址
- WPF新手实践6:MVVM Light Toolkit(六、MustToggleIsEnabled)
- BMP图片存储