728x90
반응형
C++에서 함수 오버라이딩(Function Overriding)은 상속(Inheritance)에서 발생하는 개념으로, 부모 클래스(Base Class)에서 정의된 함수를 자식 클래스(Derived Class)에서 재정의하는 것을 의미합니다. 이로 인해 자식 클래스에서 부모 클래스의 함수를 재사용하거나 확장할 수 있습니다. 함수 오버라이딩은 다형성(Polymorphism)의 핵심 요소 중 하나로, 런타임 시점에 적절한 함수가 호출되도록 합니다.
함수 오버라이딩의 조건
- 함수 시그니처(Function Signature): 오버라이딩하는 함수는 부모 클래스의 함수와 동일한 함수 이름, 매개변수 리스트, 반환 타입을 가져야 합니다.
- 접근 제어자(Access Specifier): 부모 클래스의 함수가
public
이나protected
로 선언되어 있어야 자식 클래스에서 오버라이딩할 수 있습니다. - virtual 키워드: 부모 클래스의 함수는
virtual
키워드로 선언되어야 합니다. 이 키워드는 해당 함수가 자식 클래스에서 오버라이딩될 수 있음을 나타냅니다. - 부모클래스와 동일한 이름의 함수를 자식 클랙스에서 정의한다고해서 무조건 함수 오버리이딩이 되는것은 아니다. 매개변수의 자료형 및 개수가 다르면 이는 함수 오버로딩되어 전달되는 인자에 따라서 호출되는 함수가 결정된다. 즉, 함수 오버로딩은 상속관계에서도 구성이 될 수 있다.
예제 코드
#include <iostream>
using namespace std;
class Base {
public:
virtual void show() { // 부모 클래스의 함수는 virtual로 선언
cout << "Base class show() function" << endl;
}
};
class Derived : public Base {
public:
void show() override { // 자식 클래스에서 오버라이딩
cout << "Derived class show() function" << endl;
Base::show(); // 오버라이드된 부모클래스의 함수를 호출하는 경우
}
};
int main() {
Base *b;
Derived d;
b = &d;
// 포인터를 통해 자식 클래스의 show()가 호출됨
b->show(); // 출력: Derived class show() function
return 0;
}
override
키워드
C++11부터는 자식 클래스의 오버라이딩 함수에 override
키워드를 명시적으로 추가할 수 있습니다. 이는 해당 함수가 부모 클래스의 함수를 정확히 오버라이딩하고 있음을 컴파일러에게 명확히 알리며, 만약 부모 클래스에 동일한 시그니처의 함수가 없다면 컴파일 오류가 발생하게 됩니다.const
키워드와 함께 사용해야 하는 경우는 const
를 먼저 작성하고 override
를 작성해야 한다.
함수 오버로딩과의 차이점
- 함수 오버로딩(Function Overloading)은 같은 클래스 내에서 같은 이름의 함수를 매개변수의 타입이나 개수에 따라 여러 번 정의하는 것.
- 함수 오버라이딩(Function Overriding)은 상속 관계에서 자식 클래스가 부모 클래스의 함수를 재정의하는 것.
요약
함수 오버라이딩은 부모 클래스에서 정의된 함수를 자식 클래스에서 동일한 시그니처로 재정의하는 기능으로, 다형성을 구현하는 중요한 요소입니다. 이 기능을 통해 자식 클래스는 부모 클래스의 함수 동작을 대체하거나 확장할 수 있습니다.
728x90
반응형
'Programming language > C++' 카테고리의 다른 글
[C++] std::for_each(), for_each() (0) | 2024.10.07 |
---|---|
[C++] 오버로딩(Overloading) (0) | 2024.09.01 |
[C++] 디폴트 복사 생성자(Default copy constructor) (0) | 2024.05.31 |
[C++] 소멸자(Destructor), 디폴트 소멸자(Default destructor) (0) | 2024.05.03 |
[C++] new, delete, 메모리 할당, 메모리 관리 (1) | 2024.05.02 |