Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- https://hjmag1120.tistory.com/
- 이리5조
- 태어난김에 보스까지
- https://mynameiskgws.tistory.com/
- 스파르타코딩클럽
- https://vetenir.tistory.com/
- https://eo-oe.tistory.com/
- https://ji-han.tistory.com/
Archives
- Today
- Total
info8995 님의 블로그
10일차(오버로딩, 오버라이딩) 본문
C++에서 함수 오버로딩(Function Overloading)
C++은 동일한 이름의 함수를 정의할 수 있습니다. 이는 함수의 이름뿐만 아니라 매개변수의 타입과 개수를 기준으로 함수를 구분하기 때문입니다.
함수 오버로딩이 되는 조건
- 매개변수의 타입이 다른 경우
동일한 이름의 함수라도 매개변수의 타입이 다르면 서로 다른 함수로 취급됩니다. - 매개변수의 개수가 다른 경우
동일한 이름의 함수라도 매개변수의 개수가 다르면 오버로딩이 가능합니다.
오버로딩이 되지 않는 경우
함수 오버로딩은 호출되는 함수가 명확히 식별 가능해야 합니다. 아래와 같은 경우는 애매모호하여 컴파일 에러가 발생할 수 있습니다:
- 반환 타입만 다른 경우
반환 타입은 함수 호출 시 구분 기준이 아니므로 오버로딩이 불가능합니다. - 디폴트 매개변수의 모호성
디폴트 매개변수가 사용되는 경우, 어떤 함수를 호출해야 할지 모호하다면 에러가 발생합니다. - 매개변수의 타입이 포인터와 배열로만 다른 경우
배열과 포인터는 본질적으로 같은 것으로 간주되므로 오버로딩이 불가능합니다.
C++에서 함수 오버라이딩(Function Overriding)
오버라이딩은 기존에 정의된 멤버 함수의 동작을 파생 클래스에서 재정의하는 것을 말합니다.
이는 다형성(polymorphism)을 구현하기 위해 사용되며, 주로 **가상 함수(virtual function)**와 함께 활용됩니다.
오버라이딩의 조건
오버라이딩은 함수의 원형(시그니처)이 부모 클래스의 함수와 동일해야 하며, 다음 조건을 만족해야 합니다:
- 함수 이름이 동일해야 합니다.
- 매개변수의 타입과 개수가 동일해야 합니다.
- 반환 타입이 동일해야 합니다.
- 접근 제어자가 부모 클래스의 함수와 충돌하지 않아야 합니다(예: private 함수를 public으로 변경 불가).
- 부모 클래스의 함수가 virtual 키워드로 선언되어 있어야 합니다.
오버로딩과 오버라이딩 비교
| 항목 | 오버로딩 | 오버라이딩 |
| 정의 | 함수 이름은 같지만 매개변수 타입/개수로 구분 | 부모 클래스의 함수를 재정의 |
| 관련 키워드 | 없음 | virtual, override |
| 시점 | 컴파일 타임 | 런타임 |
| 함수 시그니처 | 매개변수만 다르면 가능 | 원형이 완전히 동일해야 함 |
| 용도 | 동일한 이름의 함수로 다양한 기능 제공 | 다형성을 구현 |
'TIL(Today I Learned) > C++' 카테고리의 다른 글
| 12일차(간단한 도서관시스템) (0) | 2025.01.02 |
|---|---|
| 11일차(컨테이너 벡터) (0) | 2024.12.31 |
| 9일차(메모리 정리,스택과 힙) (2) | 2024.12.27 |
| 7일차(class) (0) | 2024.12.24 |
| 6일차(변수, 배열, 함수) (1) | 2024.12.23 |