C++基础 学习笔记四:重载之函数重载
2020-04-22 16:00:26来源:博客园 阅读 ()
C++基础 学习笔记四:重载之函数重载
函数重载 参数C++基础 学习笔记四:重载之函数重载
什么是函数重载
在C++中允许在同一作用域内声明几个功能类似的同名函数。也就是说用同一个函数完成不同的功能。重载函数是静态多态性的体现。
函数重载的特点
- 形式参数(指参数的个数、类型或者顺序)必须不同。函数返回值类型可以相同也可不同。
- 匹配函数时并不区分
const
,引用&
,但是const
与*
或&
结合组成复合运算符时会进行区分,下面会进行代码演示。 - 避免了命名空间的污染
函数重载的实现原理
编译程序时编译器会对函数的原始名称进行名称修饰
,经过修饰得到的名称来表示函数。
函数重载的使用例子
#include<iostream>
using namespace std;
class Printer
{
private:
int inkVolume;
char printerType;
public:
Printer():inkVolume(0),printerType('Z')
{cout << "print by none-arg function" <<endl;}
Printer(int vol):inkVolume(vol),printerType('Z')
{cout << "print by 1-arg function" <<endl;}
Printer(int vol, char type):inkVolume(vol),printerType(type)
{cout << "print by 2-arg function" <<endl;}
//void print(int value){cout << value << " print by function #1" <<endl;}//#1
void print (int value) const {cout << value << " print by const function #2" <<endl;}//#2
void print(int &value){cout << value << " print by function #3" <<endl;}//#3
void print(const int &value){cout << value << " print by function #4" <<endl;}//#4
void print(int &&value){cout << value << " print by function #5" <<endl;}//#5
//int print(int value){cout << value << " print by function #6" <<endl;return 0;}//#6仅返回值不同,编译不通过
//void print(const int value){cout << value << " print by function #7" <<endl;}//#7
//void print(int value, int value2 = 1){cout << value << value2 << " print by function #8" <<endl;}//#8默认参数在后
void print(float value){cout << value << " print by function #9" <<endl;}//#9
void print(char value){cout << value << " print by function #10" <<endl;}//#10
void print(char* value){cout << *value << " print by function #11" <<endl;}//#11
void print(const char* value){cout << *value << " print by function #12" <<endl;}//#12
//void print(char* const value){cout << value << " print by function #13" <<endl;}//#13
};
int main()
{
Printer printer1;
Printer printer2(123);
const Printer printer3(123,'A');
int intValue = 123;
const int c_intValue = 1234;
float floatValue = 1.1;
char charValue = 'A';
char* p_charValue = new char('B');
const char* cp_charValue = new char('C');
//printer1.print(1);//1 是 立即数常量 可以调用#1,#4,#5 ,#2(当且仅当仅存在#2时)
printer3.print(1);//只调用 #2
printer1.print(intValue);//#3
printer1.print(c_intValue);//#4
printer1.print(1+1);//#5
printer1.print(floatValue);//#9
printer1.print(charValue);//#10
printer1.print(p_charValue);//#11
printer1.print(cp_charValue);//#12
return 0;
}
/* 运行结果为:
print by none-arg function
print by 1-arg function
print by 2-arg function
1 print by const function #2
123 print by function #3
1234 print by function #4
2 print by function #5
1.1 print by function #9
A print by function #10
B print by function #11
C print by function #12
--------------------------------
Process exited after 0.09048 seconds with return value 0
请按任意键继续. . .
*/
代码分析
int value
和const int value
没有区别,作为参数时都不会改变实参的值。不可重载。char *value
和const char *value
是有区别的,前者指向一个字符串变量,后者指向一个字符串常量。可重载。char *value
和char const *value
没有区别,前者为字符指针变量,后者为字符指针常量。作为参数时都不会改变实参的值。不可重载。int &value
和const int &value
是有区别的,前者指向一个整型变量,后者指向一个整型常量。可重载。int &&value
&&表示右值引用
原文链接:https://www.cnblogs.com/realZhaZhaHui/p/12757835.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 转换函数搭配友元函数 2020-06-10
- C++ 自动转换和强制类型转换(用户自定义类类型) 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- C++ 运算符重载 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash