1. 일반 설명
입력 및 출력 연산자는 비 멤버 함수 여야합니다. 그렇지 않으면 왼쪽에있는 피연산자가 다음 코드와 같이 클래스의 객체가됩니다.
Sales_data data;
data << cout;
- IO 작업은 일반적으로 클래스의 비공개 데이터를 읽고 써야하기 때문에 입력 및 출력 연산자는 일반적으로 친구로 선언됩니다.
- 입력 연산자는 입력이 실패 할 수있는 상황을 처리해야하지만 출력 연산자는 그렇지 않습니다.
2. 출력 연산자 <<
매개 변수 설명 :
- 첫 번째 매개 변수는 일반적으로 상수가 아닌 ostream 객체에 대한 참조입니다. 그 이유는 스트림에 쓰면 상태가 변경되고 참조는 ostream 객체를 복사 할 수 없기 때문입니다.
- 두 번째 매개 변수는 인쇄 할 유형의 상수 참조입니다.
- 반환 값은 ostream 매개 변수입니다.
예.
ostream &operator<<(ostream &os,const Sales_data &item)
{
os<<item.isbn()<<" "<<item.units_sold<<""
<<item.revenue<<" "<<item.avg_price();
return os;
}
참고 : 출력 연산자는 형식을 제어하는 것이 아니라 주로 개체의 내용을 인쇄해야하며 출력 연산자는 줄 바꿈 문자를 인쇄해서는 안됩니다.
3. 입력 연산자 >>
매개 변수 설명 :
- 첫 번째 매개 변수는 일반적으로 운영자가 읽을 스트림에 대한 참조입니다.
- 두 번째 매개 변수는 읽을 (비상 수) 개체에 대한 참조입니다.
- 반환 값은 istream 매개 변수입니다.
예.
istream &opertaor>>(istream &is,Sales_data &item)
{
double price;// 不需要初始化,因为我们将先读入数据到`price`,之后才使用它
is>>item.bookNo>>iten.units_sold>>price;
//检查输入是否成功
if(is)
{
item.revenue=item.units_sold*price;
}else{
item=Sales_data(); //输入失败:对象呗赋予默认的状态
}
return is;
}
노트:
- 스트림에 잘못된 유형의 데이터가 포함 된 경우 읽기 작업이 실패하고 다른 후속 사용이 실패 할 수 있습니다.
- 읽기 작업이 파일 끝에 도달하거나 입력 스트림에서 다른 오류가 발생하면 실패합니다.
- 읽기 작업에서 오류가 발생하면 입력 연산자가 오류 복구를 담당해야합니다.