本文已参与「新人创作礼」活动,一起开启掘金创作之路。
游戏开发之函数的重载(C++基础)
一、基本使用
- C中的函数不可以进行重载,C++中的可以。
- 函数重载是在同名函数的情况下发生的。
- 重载的条件: 同一个作用域; 参数个数不同; 参数类型不同; 参数顺序不同;
- 返回值类型不同不能作为重载条件。
- 使用函数重载时,必须手动转化为需要的类型,不会再有隐式转换。
TIPS: 不要过分依赖函数重载。 不要使用函数重载实现复杂的功能。
void F(int) { printf("F int\n"); }
void F(int,int) { printf("F int int\n"); }
void F(int,int,int) { printf("F int int int\n"); }
void F(double) { printf("F double\n"); }
void F(double, double) { printf("F double double\n"); }
void F(int, double) { printf("F int double\n"); }
void F(double, int) { printf("F double int\n"); }
int main()
{
F(1);
F(1, 2);
F(1, 2, 3);
F(1.0);
F(1.0, 2.0);
F(1, 2.0);
F(2.0, 1);
F(2, 1.0f);
return 0;
}
二、编译器函数重载的原理
使用 dumpbin /EXPORTS 工具
//_declspec(dllexport):这个是windows下,导出函数给其他程序使用的关键字。
_declspec(dllexport) void F(int) { printf("F int\n"); }
_declspec(dllexport) void F(int,int) { printf("F int int\n"); }
_declspec(dllexport) void F(int,int,int) { printf("F int int int\n"); }
_declspec(dllexport) void F(double) { printf("F double\n"); }
_declspec(dllexport) void F(double, double) { printf("F double double\n"); }
_declspec(dllexport) void F(int, double) { printf("F int double\n"); }
_declspec(dllexport) void F(double, int) { printf("F double int\n"); }
// 使用标准的C风格函数
extern "C" {
_declspec(dllexport) void func11() { std::cout << "He12312312" << std::endl; }
_declspec(dllexport) void func22(int b) { std::cout << "He12312312" << std::endl; }
_declspec(dllexport) void func33(int b, float a) { std::cout << "He12312312" << std::endl; }
_declspec(dllexport) void func44(int b, float a, char c) { std::cout << "He12312312" << std::endl; }
}
1.首先运行程序,生成exe文件。
2.打开vs 2017的开发人员命令提示符
3.输入以下命令
TIPS:因为博主在同一个项目内的另一个cpp文件中同样有一个同版副本,所以才有22个。只需要看红色框框圈出的即可。
版权声明:本文为CSDN博主「ufgnix0802」的原创文章:
原文链接:(blog.csdn.net/qq135595696…)