C++ Chapter 12.11 : Derived Class 에서 출력 연산자 사용하기
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!
chapter 12. 가상 함수들 : Derived Class 에서 출력 연산자 사용하기
🔔 출력 연산자 오버로딩은 전역 함수로만 구현 가능
입출력 연산자는 오버라이딩을 할 수 없다. 일반 전역 함수로만 구현할 수 있다.
<<
연산자의 왼쪽 피연산자가 되는std::cout
이ostream
타입이기 때문에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 오버라이딩
std::cout << d
- Base 의 출력연산자 오버로딩 호출
- 출력연산자 오버로딩의 인수에서
const Base & base = d
다형성 base.print(out)
- print는 가상함수이므로 Derived의 print 함수가 호출됨.
- “Derived” 출력
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글남기기