标签:相同 调用 names mes 类型转换 pac a* c++ end
函数重载(Function Overload):用同一个函数名定义不同的函数,当函数名和不同的参数搭配时函数的含义不同。
(1)函数名相同;
(2)参数个数不同,参数的类型不同,参数顺序不同,均可构成重载;
(3)返回值类型不同则不可以构成重载。
void func(int a);//OK void func(char a);//OK void func(char a,int b);//OK void func(int a,char b);//OK char func(int a);//与第一个函数有冲突
(1)严格匹配,找到则调用;
(2)通过隐式转换寻求一个匹配,找到则调用;
#include <iostream> using namespace std; void print1(double a) { cout << a << endl; } void print1(int a) { cout << a << endl; } int main(void) { print1(1);//1, print(int) print1(1.1);//1.1, print(double) print1(‘a‘);//,97, print(int) print1(1.11f);//1.11 print(double) return 0; }
编译器调用重载函数的准则:
C++利用 name mangling(倾轧)技术,来改名函数名,区分参数不同的同名函数。
实现原理:用 v c i f l d 表示 void char int float long double 及其引用。
void func(char a);//func_c(char a) void func(char a,int b,double c);//func_cid(char a,int b,double c)
一个函数,不能既作重载,又作默认参数的函数。当你少写一个参数时,系统无法确认是重载还是默认参数。
#include <iostream> using namespace std; int func(int a, int b, int c = 0) { return a*b*c; } int func(int a, int b) { return a+b; } int func(int a) { return a; } int main(void) { int c = 0; c = func(1, 2);//error,存在二义性,调用失败,编译不能通过 printf("c=%d\n", c); return 0; }
标签:相同 调用 names mes 类型转换 pac a* c++ end
原文地址:https://www.cnblogs.com/yuehouse/p/9787031.html