C++/Class 2021. 3. 20. 17:26

함수 오버라이딩

  • 자식 클래스에서 부모 클래스의 함수명과 같은 함수를 정의할 수 있다.

    • 함수 오버로딩과 비슷하다. 호출하는 클래스에 따라 결정된다는 점이 다르다.

예제

함수 오버라이딩

  #include <iostream>

  class Base
  {
  public:
    void    print()
    {
      std::cout << "I'm Base\n";
    }
  };

  class Derived : private Base
  {
  public:
    void    print()
    {
      Base::print();
      std::cout << "I'm Derived\n";
    }
  };

  int        main()
  {
    using namespace std;

    Derived().print();
  }

  /* stdout
  I'm Base
  I'm Derived
  */

연산자 오버라이딩

  • 연산자 오버로딩도 오버라이딩할 수 있다.

  • static_cast를 통해서 부모 클래스로 형변환하면 부모 클래스에서 오버로딩한 연산자도 사용할 수 있다.

    #include <iostream>
    
    class Base
    {
    public:
      friend std::ostream& operator << (std::ostream& out, const Base& b)
      {
        out << "This is Base output\n";
        return (out);
      }
    };
    
    class Derived : private Base
    {
    public:
      friend std::ostream& operator << (std::ostream& out, const Derived& d)
      {
        out << static_cast<Base>(d);
        out << "This is Derived output\n";
        return (out);
      }
    };
    
    int        main()
    {
      using namespace std;
    
      cout << Derived();
    }
    
    /* stdout
    This is Base output
    This is Derived output
    */

'C++ > Class' 카테고리의 다른 글

C++ 다중 상속  (0) 2021.03.20
C++ 상속받은 멤버의 접근 권한 변경  (0) 2021.03.20
C++ 상속과 접근 지정자  (0) 2021.03.20
C++ 상속과 패딩  (0) 2021.03.20
C++ 유도된 클래스들의 소멸 순서  (0) 2021.03.19