학습일지/C와 C++

C++ 복사 생성자와 오버로딩

Tsukino Ren 2026. 3. 11. 19:58

3-1 오버로딩

int Add(int X, int Y);
	// 위와 같이 Add() 함수가 정의되어 있다고 해봅시다.
	// 어느 날, float 자료형의 값들 간의 덧셈 함수를 구현해야 했습니다.
	// "Add"라는 이름은 이미 int 자료형의 값들 간의 덧셈 함수 구현에 쓰였으니,
	// float Accumulate(float X, float Y);라고 정의해야 할까요?
	// 팀원에게 "int 간의 덧셈은 Add() 함수 쓰고, float 간의 덧셈은 Accumulate() 함수 써야해"라고 해야하나요?

	// 이름은 같지만(Add), 매개변수 목록(int, float, double, ...)은 다르게 함수를 재정의 할 수 있습니다.

 

오버로딩(Overloading)

  • 같은 이름이지만 매개변수 목록은 다르게 함수를 재정의하는 것을 "오버로딩"이라 한다.
  1. 함수 중복 정의 - 같은 반환 자료형, 같은 이름, 같은 매개변수 목옥으로 함수를 다시 정의 하는 경우 //컴파일에러
  2. 함수 오버라이딩 - 같은 반환 자료형, 같은 이름, 같은 매개변수 목옥으로 부모 클래스의 멤버 함수를 다시 정의하는 경우
  3. 함수 오버로딩 - 같은 이름, 다른 매개변수 목록으로 함수를 다시 정의하는 경우. 반환 자료형은 오버로딩의 판단 기준 X
int ADD()

int ADD() // 위와 같은 함수로 중복 정의

void ADD() // 반환 자료형이 달라도 함수명과 매개변수가 같으므로 중복 정의

int ADD(int A, int B) // 함수는 같으나 매개변수가 다르므로 오버로딩

함수 오버로딩 매칭

오버로딩된 함수 중에 어떤 함수를 호출해야 하는지 판단하는 과정. 함수 매칭 결과는 3가지가 있다.

  • 첫 번째, 가장 적합한 함수를 하나 찾은 경우 -> 정상 작동
  • 두 번째, 매칭 되는 함수를 여러 개 찾은 경우 -> 컴파일 에러
  • 세 번째, 매칭 되는 함수를 찾을 수 없는 경우 -> 컴파일 에러
  •  
int Max(int, int);
int Max(double, double);

Max(1, 3.14); 
	// 1번을 매칭해도 1개는 정확한 매치, 1개는 암시적 형변환(표준 변환)
	// 2번을 매칭해도 1개는 암시적 형변환, 1개는 정확한 매치.
	// 따라서 모호한 호출이므로 컴파일 에러.

'학습일지 > C와 C++' 카테고리의 다른 글

C/C++ 상속과 다형성, 추상 클래스  (0) 2026.03.12
C++ RPG 전투 시스템 구현 과제  (0) 2026.03.11
C/C++ 전직  (0) 2026.03.10
C/C++ Class  (0) 2026.03.09
C++ Console IO  (0) 2026.03.08