TIL::Today I Learn

[TIL] 20230720

madylin 2023. 7. 28. 14:38
반응형

오늘 공부한 내용📓

- 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