关于<<和>>重载操作符 返回值的问题
来源:互联网 发布:linux apache 加载php 编辑:程序博客网 时间:2024/06/01 10:23
操作符重载一般有以下几点需要注意的:
1)重载操作符必须有一个类类型的操作数,这是为了避免对已有的内置类型对象的操作符的原本含义的更改;
2)重载后的操作符的优先级和结合性是固定不变的;
3)重载操作符为类成员函数时,它的形参表中会少一个形参,原因是有一个隐含形参this,而且该this形参限定为第一个操作数;
4)当操作符为非类成员函数的时候,如果该函数需要访问类的私有数据成员,需要将该操作符设置为友元。
下面主要介绍介个常用的操作符重载模式以及需要注意的问题
一、输出操作<<的重载
其函数原型是
ostream& operator<<(ostream& os, const Classtype &object) {
os<<object.(数据成员名);
return os;
}
针对上面的操作符重载,我们给出以下解释:
该操作符重载的第一个形参类型是ostream&,原因是ostream对象不能复制,因此选择引用,ostream对象同样不能是const的,因为写入到流通长会改变流的状态。第二个形参为const Classtype的应用,原因是为了避免类对象的复制,同时输出操作不应该对对象的数据成员做修改,所以应该声明为const的。另外输出操作符要尽可能少的做格式化,而且IO操作符必须为非类成员函数,主要是为了和目前所用的形式统一,通常将其设置为类的友元。返回值类型是ostream& 类型个人认为主要是为了使用方便,适用于连写的这种方式,比如cout<<object1<<object2.........
#include <iostream>#include <string>using namespace std;class student{public:student():a(0),s("Hello"){};student(int c,string s1):a(c),s(s1){};student& student::operator=(student &stu){this->a=stu.a;this->s=stu.s;return *this;}/*friendvoid operator<<(ostream& out,const student &stu){out<<stu.a<<"\t"<<stu.s;}*/friend ostream& operator<<(ostream& out,const student &stu){//注意此处的形参,out不可以为const。out<<stu.a<<"\t"<<stu.s;return out;}friend istream& operator>>(istream& in,student &stu){//返回值必须为引用,且类形参为非const,因为要对其写入。in>>stu.a>>stu.s;return in;}private:int a;string s;};int main(){student ab(3,"I miss you");student stu1,stu2;stu1=stu2=ab;//=操作符返回值,可以为引用或者非引用,因为操作顺序是从右向做操作的。cout<<stu1;//即使<<操作符返回值为空值,也可以这么进行输出。但是如果想连续输出//就像cout<<stu1<<stu2;就必须使用返回值为ostream &的版本了,而且此时的返回值必须为引用。。//因为操作的顺序是从左到右,返回的引用,还可以对其赋值。如果返回非引用,ostream对象没有办法复制cin>>stu1;cout<<stu1;return 1;}
- 关于<<和>>重载操作符 返回值的问题
- 关于操作符“>>”和“<<”的重载
- 关于 操作符“<<”和“>>”重载的心得
- C++运算符重载,+-*/的重载,返回值为什么是对象而不是对象的引用?而流操作符<< 和 >> 却返回的是引用?
- C++运算符重载,+-*/的重载,返回值为什么是对象而不是对象的引用?而流操作符<< 和 >> 却返回的是引用?
- 关于C++中操作符重载的问题
- 关于重载赋值操作符需要返回引用
- 操作符重载的问题
- 关于C++操作符重载之"->"和"*"
- 关于操作符重载
- 关于重载操作符
- 关于局部指针变量和数组的操作返回值
- 模板类中操作符重载问题("<<"和">>"重载)
- 模板类中操作符重载问题("<<"和">>"重载)
- 关于操作符重载的小总结
- C#关于操作符的重载
- 关于c++ new操作符的重载
- 关于重载的问题
- 什么是REST?
- Javascript基础
- 自动化办公系统(整理中)
- select * from dictionary; oracle字典表
- linux centos 开机自启动服务
- 关于<<和>>重载操作符 返回值的问题
- Windows 7下多点触摸API
- 串的块链存储
- 关于jdbc
- IOS简单调用Google地图
- SSH框架总结(框架分析+环境搭建+实例源码下载)
- GCT学习有感----关于交流沟通
- 在多标签浏览器中,当前页面弹出新的小的窗口
- windows 7多点触摸开发