【聚杰网C++】C++的iostream标准库介绍
对于iostream标准库来说包含了众多的成员函数,各函数都有其自身的作用,篇幅问题笔者在这里不能一一说明例举,由于标准输入对象cin提供输入的时候会自动以空格作为分界,给我们获取一行带有空格的完整字符串带来了困难,在这里补充一个非常用有的成员函数----getline()。
其函数原型为:
getlin(chiar *str,int size,char='/n');
第一个参数是字符数组,用于存放整行文本,第二个参数读取的最大字符个数,第三个参数为作为分界界限的字符,默认识是/n,换行符。
示例代码如下:
| //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include<iostream> #include<iomanip> usingnamespacestd; intmain() { charstr[100]; cin.getline(str,sizeof(str),'/n'); cout<<str<<endl; system("pause"); } |
通过上面内容的学习,我们对i/o有了一些基本点基本的认识,现在是该切入正题的时候了,详细学习一下,如何重载左移与右移操作符。
先说左移(<<)操作符,也就是我们常说的输出操作符。
对于自定义类来说,重载左移操作符的方法我们常使用类的友元方式进行操作。
示例代码如下:
| //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include<iostream> usingnamespacestd; classTest { public: Test(intage=0,char*name="/0") { Test::age=age; strcpy(Test::name,name); } voidoutmembers(ostream&out) { out<<"Age:"<<age<<endl<<"Name:"<<this->name<<endl; } friendostream&operator<<(ostream&,Test&); protected: intage; charname[50]; }; ostream&operator<<(ostream&out,Test&temp) { temp.outmembers(out); returnout; } intmain() { Testa(24,"管宁"); cout<<a; system("pause"); } |
上例代码中,我们对void outmembers(ostream &out)的参数使用ostream定义主要是为了可以向它传递任何ostream类对象不光是cout也可以是ofstrem或者是ostrstream和ostringstream类对象,做到通用性。
重载运算符,我们知道可以是非成员方式也可以是成员方式的,对于<<来说同样也可以是成员方式,但我十分不推荐这么做,因为对于类的成员函数来说,第一个参数始终是会被隐藏的,而且一定是当前类类型的。
下面的示例代码就是将上面的<<重载函数修改成成员方式的做法:
| //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include<iostream> usingnamespacestd; classTest { public: Test(intage=0,char*name="/0") { Test::age=age; strcpy(Test::name,name); } voidoutmembers(ostream&out) { out<<"Age:"<<age<<endl<<"Name:"<<this->name<<endl; } ostream&operator<<(ostream&out) { this->outmembers(out); returnout; } protected: intage; charname[50]; }; intmain() { Testa(24,"管宁"); a<<cout; system("pause"); } |
从代码实现上,我们将函数修改成了ostream& operator <<(ostream &out),迫不得已将ostream类型的引用参数放到了后面,这是因为,成员方式运算符重载函数第一个参数会被隐藏,而且一定是当前类类型的,这和ostream类型冲突了。由此我们在使用cout输出的时候就必须写成a<<cout;,这样一来代码的可读行就大大降低了,这到底是左移还是右移呢?为此我再一次说明,对于左移和右移运算符的重载是十分不推荐使用成员函数的方式编写的。





