当前位置:编程学习 > C/C++ >>

第14章 重载操作符与转换(2)

14.2 输入和输出操作符
支持I/O操作的类所提供的I/O操作接口,一般应该与标准库iostream为内置类型定义的接口相同,因此,许多类都需要重载输入和输出操作符。
14.2.1 输出操作符<<的重载
为了与IO标准库一致,操作符应接受ostream&作为第一个形参,对类类型const对象的引用作为第二个形参,并返回ostream形参的引用。
1. 输出操作符

class Class1 

public: 
    int counter; 
    friend ostream& operator<<(ostream& out, const Class1& c); 
public: 
    Class1(int counter = 100):counter(counter){} 
}; 
 
ostream& operator<<(ostream& out, const Class1& c) 

    out << "This is Class1!"; 
    out << c.counter; 
    return out; 


Class1 c1(200); 
cout << c1 << endl; 
return 0; 
2.输出操作符通常所做格式化应尽量少
一般而言,输出操作符应输出对象的内容,进行最小限度的格式化,它们不应该输出换行符。
尽量减少操作符所做的格式化,让用户自己控制输出细节。
3. IO操作符必须为非成员函数
我们不能将该操作符定义为类的成员,否则,左操作数将只能是该类类型的对象。
相反,如果需要使用重载操作符为该类型提供IO操作,就必须将它们定义为非成员函数。IO操作符通常对非公用数据成员进行读写,因此,类通常将IO操作符设为友元。
14.2 输入操作符>>的重载
输入操作符的第一个形参是一个引用,指向它要读的流,并且返回的也是对同一个流的引用。它的第二个形参是对要读入的对象的非const引用,该形参必须为非const,因为输入操作符的目的是将数据读到这个对象中。
更重要但通常重视不够的是,输入和输出操作符有如下区别:输入操作符必须处理错误和文件结束的可能性。
1. 输入操作符

friend istream& operator>>(istream& in, Class1 &c); 

istream& operator>>(istream& in, Class1 &c) 

    int i = c.counter; 
    in >> c.counter; 
 
    if(!in) 
        c = Class1(i); 
    return in; 

设置输入操作符时,如果可能,要确定错误恢复措施,这很重要。

摘自 xufei96的专栏

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,