다형성은 편리하고 유용하지만
모든 경우에 사용할 수 없다.
출력연산자가 대표적인 경우이다.
출력연산자를 사용하려면 함수를 따로 하나 생성하여 오버라이딩 한다.
즉, 함수에게 기능을 위임한다.
비슷한 전략이 다른경우에도 사용될 수 있다.
핵심. 새로운 가상함수를 이용해 문제점을 해결한다.
#include <iostream>
using namespace std;
class Base
{
public:
Base() {};
friend ostream& operator << (ostream &out, const Base &b)
{
return b.print(out);
}
virtual ostream& print(ostream& out) const
{
out << "Base";
return out;
}
};
class Derived : public Base
{
public:
Derived() { };
virtual ostream& print(ostream& out)const override
{
out << "Derived";
return out;
}
};
int main() {
Base b;
cout << b << endl;
Derived d;
cout << d << endl;
return 0;
}
'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글
c++ dynamic_cast 동적형변환 (0) | 2019.09.30 |
---|---|
c++ 객체잘림,reference wapper (0) | 2019.09.30 |
c++ 다이아몬드 상속문제 해결 (0) | 2019.09.30 |
c++ 순수가상함수,추상기본클래스,인터페이스 (0) | 2019.09.30 |
c++ vitual,가상함수 (0) | 2019.09.30 |