C++/Class
2021. 3. 21. 23:56
유도 클래스에서 출력 연산자 사용하기
- 연산자 오버로딩할 때만 사용하는게 아니라, 다형성을 더 유연하게 구현할 때도 사용되는 기법이다.
예제
멤버 함수로 만들 수 없는 연산자를 오버라이딩한 것 처럼 구현하기 위해서 다음과 같은 기법을 사용할 수 있다.
print
함수를 오버라이딩하고, 연산자 오버로딩을 할 때 이를 호출하는 방식이다.
#include <iostream> class Base { public: friend std::ostream& operator << (std::ostream& out, const Base& b) { return b.print(out); } virtual std::ostream& print(std::ostream& out) const { out << "Base"; return out; } }; class Derived : public Base { public: virtual std::ostream& print(std::ostream& out) const override { out << "Derived"; return out; } }; int main() { using namespace std; Base b; cout << b << '\n'; Derived d; cout << d << '\n'; Base& bref = d; cout << bref << '\n'; } /* stdout Base Derived Derived */
'C++ > Class' 카테고리의 다른 글
C++ 동적 형변환 (Dynamic Casting) (0) | 2021.03.21 |
---|---|
C++ 객체 잘림 (Object Slicing) (0) | 2021.03.21 |
C++ 다이아몬드 상속 (Diamond Polymorphism) (0) | 2021.03.21 |
C++ 인터페이스 클래스 (Interface Class) (0) | 2021.03.21 |
C++ 추상 기본 클래스 (Abstract class) (0) | 2021.03.21 |