반응형
오늘 공부한 내용📓
- C++
개념 공부
클래스 상속 함수 오버라이딩
class Base {
public:
virtual void printMessage() const {
std::cout << "This is Base class" << std::endl;
}
};
class Derived : public Base {
public:
// Base 클래스의 printMessage() 함수를 오버라이딩
void printMessage() const override {
std::cout << "This is Derived class" << std::endl;
}
};
int main() {
Base baseObj;
Derived derivedObj;
// 기존 클래스의 함수 호출
baseObj.printMessage(); // 출력: "This is Base class"
// 파생 클래스에서 오버라이딩한 함수 호출
derivedObj.printMessage(); // 출력: "This is Derived class"
return 0;
}
- 기존 클래스에서 상속받은 함수를 파생 클래스에서 수정하여 사용하고 싶을 경우, 함수 오버라이딩을 통해 해당 함수를 새로 정의하면 됨
- 함수 오버라이딩을 위해 다음의 조건을 만족해야 함
- 기존 클래스에서 오버라이딩 하려는 함수는 가상(virtual) 함수로 선언되어야 함
- 기존 클래스의 함수와 함수의 이름, 반환 타입, 매개변수 리스트가 동일해야 함
클래스 상속 생성자 오버라이딩
class Base {
public:
int value;
Base() : value(0) {
std::cout << "Base default constructor called." << std::endl;
}
Base(int val) : value(val) {
std::cout << "Base parameterized constructor called." << std::endl;
}
};
class Derived : public Base {
public:
// 기본 클래스의 생성자를 오버라이딩
Derived() : Base() {
std::cout << "Derived default constructor called." << std::endl;
}
// 기본 클래스의 생성자를 오버라이딩하며 추가적인 파라미터 사용
Derived(int val) : Base(val) {
std::cout << "Derived parameterized constructor called." << std::endl;
}
};
int main() {
Base baseObj; // 출력: "Base default constructor called."
Derived derivedObj; // 출력: "Base default constructor called.", "Derived default constructor called."
Base baseObj2(42); // 출력: "Base parameterized constructor called."
Derived derivedObj2(99); // 출력: "Base parameterized constructor called.", "Derived parameterized constructor called."
return 0;
}
- 생성자와 소멸자 오버라이딩은 위의 함수 오버라이딩과 다름
- 상속된 변수들의 초기화는 기존 클래스의 생성자에서 진행하기 때문에, 파생 클래스의 생성자에서 기본 클래스의 생성자를 호출해야 함.
- 오버라이딩 시, 파생 클래스의 생성자가 호출되면 먼저 기본 클래스의 생성자가 호출되고, 이후 파생 클래스의 생성자가 실행됨.
반응형
'TIL::Today I Learn' 카테고리의 다른 글
[TIL] 20230723 (0) | 2023.07.28 |
---|---|
[TIL] 20230721 (0) | 2023.07.28 |
[TIL] 20230719 (0) | 2023.07.28 |
[TIL] 20230718 (0) | 2023.07.28 |
[TIL] 2023714 (1) | 2023.07.18 |