기사 디렉토리
블로그 요약:
- 오버로드된 함수: 동일한 함수 이름을 사용하여 다양한 함수 매개변수 목록을 정의합니다.
- 판단 기준: 함수 매개변수 의 수/유형/순서 의 차이만이 "함수 오버로딩"의 기준이며, 함수의 반환 값은 "함수 오버로딩"의 기준이 아닙니다.
1. 함수 오버로딩
1. 함수 오버로딩의 개념
C++의 "함수 오버로딩" 개념:
- 동일한 함수 이름을 사용하고 다른 함수를 정의하십시오.
- 함수 이름은 동일하지만 매개변수 순서나 매개변수 목록의 매개변수 유형이 다릅니다.
참고: 함수 매개변수만이 "함수 오버로딩"을 판단하는 기준이며, 함수의 반환 값은 "함수 오버로딩"을 판단하는 기준이 아닙니다.
2. 기능 과부하 판단 기준
"기능 오버로딩"은 다음 조건(판단 기준)을 충족합니다.
- 매개변수 "숫자"가 다릅니다.
- 매개 변수 "유형"이 다릅니다.
- 매개 변수 "순서"가 다릅니다.
함수 매개변수만이 "함수 오버로딩"의 판단 기준이며, 함수의 반환 값은 "함수 오버로딩"의 판단 기준이 아닙니다.
2. 코드 예시
1. 코드 예시 - 함수 오버로딩
다음 코드에는 세 가지 재미있는 함수가 정의되어 있으며 모두 오버로드된 함수입니다.
첫 번째 fun 함수는 int 정수 매개변수를 받습니다.
// 函数1 : 接收一个整数参数
void fun(int i) {
cout << "打印整数: " << i << endl;
}
두 번째 fun 함수는 2개의 int 유형 매개변수를 받습니다; 이 오버로드된 함수는 첫 번째 함수와 다른 수의 매개변수를 갖습니다.
// 函数2 : 接收两个整数参数
void fun(int i, int j) {
cout << "打印两个整数: " << i << " 和 " << j << endl;
}
세 번째 fun 함수는 부동 소수점 유형 매개변수를 받습니다. 이 오버로드된 함수는 매개변수 유형의 첫 번째 함수와 다르며 매개변수 유형과 숫자 모두에서 두 번째 함수와 다릅니다.
// 函数3 : 接收一个浮点数参数
void fun(float f) {
cout << "打印浮点数: " << f <<endl;
}
함수를 호출할 때 전달된 매개변수에 따라 호출되는 오버로드된 함수를 결정합니다.
실제 매개변수 4를 전달합니다. 매개변수 유형은 int 유형이고 첫 번째 오버로드된 함수가 호출됩니다.
fun(4); // 调用第一个 fun 函数
실제 매개변수 2, 3을 전달하고 매개변수 유형은 2개의 int 유형이며 두 번째 오버로드된 함수가 호출됩니다.
fun(2, 3); // 调用第二个 fun 函数
실제 매개변수 1.5f를 전달하고 매개변수 유형은 부동 소수점 유형이며 세 번째 오버로드된 함수가 호출됩니다.
fun(1.5f); // 调用第三个 fun 函数
코드 예:
// 包含 C++ 头文件
#include "iostream"
// 使用 std 标准命名空间
// 该命名空间中 , 定义了很多标准定义
using namespace std;
// 函数重载示例
// 函数1 : 接收一个整数参数
void fun(int i) {
cout << "打印整数: " << i << endl;
}
// 函数2 : 接收两个整数参数
void fun(int i, int j) {
cout << "打印两个整数: " << i << " 和 " << j << endl;
}
// 函数3 : 接收一个浮点数参数
void fun(float f) {
cout << "打印浮点数: " << f <<endl;
}
int main()
{
fun(4); // 调用第一个 fun 函数
fun(2, 3); // 调用第二个 fun 函数
fun(1.5f); // 调用第三个 fun 函数
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
결과 :
打印整数: 4
打印两个整数: 2 和 3
打印浮点数: 1.5
Press any key to continue . . .
2. 코드 예시 - 반환값은 함수 오버로딩 판단 기준이 아님
함수 매개변수만이 "함수 오버로딩"의 판단 기준이며, 함수의 반환 값은 "함수 오버로딩"의 판단 기준이 아닙니다.
따라서 두 함수의 매개변수 목록은 동일하지만 반환 값이 다른 경우 컴파일 타임에 오류가 보고되고 프로그램이 실행될 수 없습니다.
함수 1은 정수 int 유형 매개변수를 받고 void 반환 값을 반환하는 void fun(int i)로 정의됩니다.
// 函数1 : 接收一个整数参数 , 返回 void 空
void fun(int i) {
cout << "打印整数: " << i << endl;
}
그런 다음 정수 매개변수를 받고 int 유형의 반환 값을 반환하는 함수 2 int fun(int i)을 정의합니다. 함수 2는 함수 1과 직접 충돌하며 컴파일 시 오류가 보고됩니다.
// 函数2 : 接收一个整数参数 , 返回 int 类型返回值
int fun(int i) {
cout << "打印整数: " << i << endl;
return 0;
}
Visual Studio 2019와 같은 IDE 도구를 사용하는 경우 코드가 작성된 후 오류가 보고됩니다.
오류 코드 예:
// 包含 C++ 头文件
#include "iostream"
// 使用 std 标准命名空间
// 该命名空间中 , 定义了很多标准定义
using namespace std;
// 函数重载示例
// 函数1 : 接收一个整数参数 , 返回 void 空
void fun(int i) {
cout << "打印整数: " << i << endl;
}
// 函数2 : 接收一个整数参数 , 返回 int 类型返回值
int fun(int i) {
cout << "打印整数: " << i << endl;
return 0;
}
int main()
{
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
결과 :
已启动生成…
1>------ 已启动生成: 项目: HelloWorld, 配置: Debug Win32 ------
1>hello_world.cpp
1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp(16,16): error C2556: “int fun(int)”: 重载函数与“void fun(int)”只是在返回类型上不同
1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp(11): message : 参见“fun”的声明
1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp(16,5): error C2371: “fun”: 重定义;不同的基类型
1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp(11): message : 参见“fun”的声明
1>已完成生成项目“HelloWorld.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========