일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 원격 제어 프로그램
- c언어
- 표준 입출력
- C++
- 알고리즘
- 파이썬
- 실습으로 다지는 c#
- 클래스 다이어그램
- Windows Forms
- 졸업 작품
- 산책하기 좋은 곳
- 소켓 통신
- 강의
- 졸업 작품 소재
- 언제나 휴일
- 표준 라이브러리 함수
- 소스 코드
- 동영상
- 추천
- 무료 동영상 강의
- 프로젝트
- 네트워크 프로그래밍
- 언제나휴일
- 캡슐화
- 안드로이드 앱 개발
- 유튜브 동영상 강의
- 충남 천안
- 실습
- c#
- 동영상 강의
Archives
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
[C++] 54. 개체 출력자 본문
이번에는 개체 출력자가 무엇인지 알아보기로 해요.
C++에서 기본 형식의 값을 스트림에 출력할 때는 ostream 형식 개체와 왼쪽 쉬프트(<<) 연산자를 이용할 수 있죠. 개발자가 정의한 형식도 기본 형식처럼 ostream 형식 개체를 이용하여 출력할 수 있게 하는 것을 개체 출력자라고 말합니다.
ostream은 표준 템플릿 라이브러리에서 정의한 형식이어서 개발자가 ostream 클래스 내부에 개체 출력자를 정의하는 것이 아닙니다. C++문법에 연산자를 중복 정의하는 방법은 클래스 내부에서 할 수도 있지만 전역에 정의할 수도 있죠. 이러한 특징을 이용하여 첫 번째 인자를 ostream이 오게 하고 두 번째 인자로 개발자가 정의한 형식 개체를 전달받는 << 연산자를 중복 정의합니다.
ostream &operator<<(ostream &os,const Member &member);
ostream &operator<<(ostream &os,const Member *member);
이처럼 전역에 연산자 중복 정의하면 기본 형식처럼 출력할 수 있습니다.
Member *member = new Member(3,"홍길동");
os<<member<<endl;
delete member;
Member member2(4,"강감찬");
os<<member2<<endl;
특히 개체 출력자는 cout을 이용하여 출력하는 것 뿐만 아니라 ostream 형식 개체라면 출력에 사용할 수 있게 작성하세요.
다음은 회원 클래스를 정의하고 ostream을 이용하여 개체 출력할 수 있게 개체 출력자를 정의한 예제입니다. 특히 사용하는 곳에서 cout을 이용하여 콘솔 화면에 출력하며 출력 파일 스트림 개체를 이용하여 파일에 출력도 가능합니다.
//Member.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
class Member
{
string name;
const int num;
public:
Member(int num,string name);
int GetNum()const;
string GetName()const;
void View(ostream &os=cout)const;
};
ostream &operator<<(ostream &os,const Member &member); //개체 출력자
ostream &operator<<(ostream &os,const Member *member); //개체 출력자
//Member.cpp
#include "Member.h"
Member::Member(int num,string name):num(num)
{
this->name = name;
}
int Member::GetNum()const
{
return num;
}
string Member::GetName()const
{
return name;
}
void Member::View(ostream &os)const
{
os<<"번호:"<<num<<" 이름:"<<name;
}
ostream &operator<<(ostream &os,const Member &member)
{
member.View(os);
return os;
}
ostream &operator<<(ostream &os,const Member *member)
{
member->View(os);
return os;
}
//Program.cpp
#include <fstream>
using namespace std;
#include "Member.h"
int main()
{
Member *member = new Member(3,"홍길동");
Member member2(4,"강감찬");
cout<<member<<endl;
cout<<member2<<endl;
ofstream of("data.txt"); //출력 파일 스트림 개체 선언
of<<member<<endl; //출력 파일 스트림에 출력
of<<member2<<endl; //출력 파일 스트림에 출력
of.close();
delete member;
return 0;
}
▷ 실행 결과
번호:3 이름:홍길동
번호:4 이름:강감찬
▷data.txt 파일 내용
번호:3 이름:홍길동
번호:4 이름:강감찬
'C & C++ > 디딤돌 C++' 카테고리의 다른 글
[C++] 61. 클래스 간의 관계 (0) | 2024.04.13 |
---|---|
[C++] 60. 템플릿 클래스 (0) | 2024.04.11 |
[C++] 58. 템플릿(TEMPLATE) 개요 59. 전역 템플릿 함수 (0) | 2024.04.11 |
[C++] 57. 예외 처리 (0) | 2024.04.11 |
[C++] 53. iostream 흉내내기 (0) | 2024.04.10 |
[C++] 52. 함수 개체 (0) | 2024.04.09 |
[C++] 51. 묵시적 형 변환 연산자 중복 정의 (0) | 2024.04.09 |
[C++] 50. 인덱스 연산자 중복 정의 (0) | 2024.04.09 |