2024. 3. 17. 20:03 C++/공부
C++] 기초(18) - 함수 오버라이딩(Overriding)
[들어가기 전]
함수 오버라이딩(Overriding)은 자식 클래스가 필요에 따라 상속된 멤버 함수를 재정의하여 사용하는 것을 의미한다. 이 기법을 사용하면 자식 클래스에서는 상속받은 멤버 함수들을 자기 자신의 필요에 맞추어 변경 할 수 있다.
[설명]
함수 오버라이딩은 자식 클래스 멤버 함수의 구현부만을 변경하는 것이므로, 자식 클래스 멤버 함수의 선언부 부분은 부모 클래스의 선언부와 동일하여야 한다. 즉 멤버 함수의 이름, 반환형, 매개변수의 개수와 자료형이 일치하여야 한다. 만약 자식 클래스에서 오버라이딩한 함수를 실수로 부모 클래스와 약간 다르게 정의한 경우, 컴파일러는 새로운 멤버 함수로 인지하기 때문에 아무런 오류가 발생하지 않는다.
<함수 오버로딩(중복정의)와 오버라이딩(재정의)의 차이>
- 오버로딩은 같은 이름의 멤버 함수를 여러개 정의하는 것. New의 개념.
- 오버라이딩은 부모 클래스에서 상속받은 멤버 함수를 다시 정의해서 내용을 변경하는 것. Change, Modify의 개념.
<함수 오버라이딩 후 부모 클래스의 대상 함수 호출 방법>
- 부모 클래스에서 대상 함수를 오버라이딩 후, 호출하기 위해서는 범위 연산자인 "::"을 사용하여 호출하면 됨.
: class Parent() { void Print();} / class Child() {void Print();}
→ Print(); // 자식클래스 오버라이딩 함수 호출
→ ::Print(); // 부모클래스 대상 함수 호출
- 자식 클래스에서는 부모 클래스의 멤버 함수를 완전히 재정의 하기보다는, 내용만 추가하는 경우가 많다. : void Print() { Parent::Print(); 기타 작업. }
[함수 오버로딩(중복정의)와 오버라이딩(재정의)의 차이]
1) 오버로딩은 같은 이름의 멤버 함수를 여러개 정의하는 것
- New의 개념.
2) 오버라이딩은 부모 클래스에서 상속받은 멤버 함수를 다시 정의해서 내용을 변경하는 것
- Change, Modify의 개념.
[함수 오버라이딩 후 부모 클래스의 대상 함수 호출 방법]
1) 부모 클래스에서 함수를 오버라이딩 후, "::" 연산자(범위연산자) 사용하여 호출
- class Parent {
void Print() {} }
- class Child : public Parent {
void Print() { // 자식클래스의 오버라이딩 수행
Parent::Print(); // 부모클래스 대상 함수 호출
기타 작업.. } }
2) 상기 예제와 같이, 자식클래스에서는 부모클래스의 멤버 함수를 완전히 재정의 하기보다는,
함수 오버라이딩에서 부모클래스의 대상 함수를 호출하여 내용만 추가하는 경우가 많다.
[함수 오버라이딩(Overriding)]
- 추후 작업.
#pragma once
#include <string>
using namespace std;
class Car
{
private:
int m_nSpeed;
public:
void SetSpeed(int nSpeed);
int GetSpeed();
};
class SportsCar : public Car
{
private:
bool m_bTurbo;
public:
void SetTrubo(bool bTurbo);
bool GetTurbo();
}
int main()
{
SprotsCar car;
car.SetSpeed(100); // 부모의 메서드
car.SetTrubo(true); // 자식의 메서드
car.GetSpeed(); // 부모의 메서드
car.GetTrubo(); // 자식의 메서드
return 0;
}
'C++ > 공부' 카테고리의 다른 글
C++] 기초(17) - 상속(Inheritance) (0) | 2024.03.17 |
---|---|
C++] 기초(16) - 싱글톤(Singleton) 디자인 패턴 (0) | 2024.03.17 |
C++] 기초(15) - 정적 변수/함수(Static Variable/Func) (0) | 2023.09.27 |
C++] 기초(14) - 복사생성자(Copy Constructor) (0) | 2023.09.10 |
C++] 기초(13) - 소멸자(Destructor) (0) | 2017.11.25 |