C++ Chapter 12.11 : Derived Class 에서 출력 연산자 사용하기

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


chapter 12. 가상 함수들 : Derived Class 에서 출력 연산자 사용하기

🔔 출력 연산자 오버로딩은 전역 함수로만 구현 가능

입출력 연산자는 오버라이딩을 할 수 없다. 일반 전역 함수로만 구현할 수 있다.

  • << 연산자의 왼쪽 피연산자가 되는 std::coutostream타입이기 때문에 ostream의 멤버로 해야 하는데, C++ 표준인 ostream클래스의 멤버 함수로 수정할 수가 없어서.


🔔 오버라이딩 하기 위한 대안

  • 출력 연산자 안에서는 b.print() 이런식으로 함수 하나만 호출하고 정작 출력 오버로딩 내용은 이 함수 안에서 전부 구현하도록 하기!
    • 오버라이딩은 이 함수를 오버라이딩 하면 된다.
#include <iostream>
using namespace std;

class Base
{
private:
	int m_base;
public:
	Base(const int& input = 0)
		:m_base(input) {}
	friend ostream& operator << (ostream& out, const Base& base)
	{
		return base.print(out);
	}
	virtual ostream& print(ostream& out) const
	{
		out << "Base";
		return out;
	}
};

class Derived : public Base
{
public:
	virtual ostream& print(ostream& out) const override
	{
		out << "Derived";
		return out;
	}
};
int main()
{
    Base b;
    std::cout << b << '\n';

    Derived d;
    std::cout << d << '\n';

    Base & bref = d;
    std::cout << bref << '\n';
}
💎출력💎

Base
Derived
Derived
  • 📜Base
    • 출력연산자 오버로딩
    • print 가상 함수
  • 📜Derived
    • print 오버라이딩
  1. std::cout << d
    • Base 의 출력연산자 오버로딩 호출
  2. 출력연산자 오버로딩의 인수에서 const Base & base = d 다형성
  3. base.print(out)
    • print는 가상함수이므로 Derived의 print 함수가 호출됨.
  4. “Derived” 출력


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

댓글남기기