【C++】함수 오버로딩① (함수 오버로딩의 개념 | 함수 오버로딩 판단 기준 - 매개변수의 개수/종류/순서 | 반환값은 함수 오버로딩 판단 기준이 아님)


블로그 요약:

  • 오버로드된 함수: 동일한 함수 이름을 사용하여 다양한 함수 매개변수 목록을 정의합니다.
  • 판단 기준: 함수 매개변수 의 수/유형/순서 의 차이만이 "함수 오버로딩"의 기준이며, 함수의 반환 값은 "함수 오버로딩"의 기준이 아닙니다.




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
打印两个整数: 23
打印浮点数: 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==========

여기에 이미지 설명을 삽입하세요

рекомендация

отblog.csdn.net/han1202012/article/details/132698434