游戏开发之函数的重载(C++基础)

137 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

游戏开发之函数的重载(C++基础)

一、基本使用

  1. C中的函数不可以进行重载,C++中的可以。
  2. 函数重载是在同名函数的情况下发生的。
  3. 重载的条件: 同一个作用域; 参数个数不同; 参数类型不同; 参数顺序不同;
  4. 返回值类型不同不能作为重载条件。
  5. 使用函数重载时,必须手动转化为需要的类型,不会再有隐式转换。

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…)