#include <iostream>
using namespace std;
class test{
friend std::istream& operator>>
(std::istream&,test&);
friend std::ostream& operator<<
(std::ostream&,test&);
public:
test(int d):data(d){};
private:
int data;
};
std::ostream& operator<< (std::ostream& os,test &t){
os<<"data is:"<<t.data<<std::endl;
return os;
};
std::istream& operator>> (std::istream& is,test &t){
is>>t.data;
return is;
};
int main(){
test t(12);
std::cout << t;
std::cin >> t;
std::cout << t;
return 0;
}
由于data为私有成员,所以将非成员函数声明为test类的友元成员。
class test2{
public:
test2(int d):data(d){};
std::ostream& operator<<(std::ostream&);
private:
int data;
};
std::ostream& test2::operator <<(std::ostream& os ){
os<<"class test2"<<" data is:"<<this->data<<std::endl;
return os;
};
int main(){
test2 t2(22);
t2<<cout;//right
cout<<t2;//error
return 0;
}
如果在类内重载io操作符,那么io操作符的使用方式就变成了t2<<cout,若使用cout<<t2则会报错的。