C++的输入输出操作符重载
来源:互联网 发布:如何进行有效阅读 知乎 编辑:程序博客网 时间:2024/05/13 21:25
操作符的重载有一些规则:
1. 重载操作符必须具有一个类类型或枚举类型操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。
如: int operator+(int, int), 不可以
2. 为类设计重载操作符的时候,必须选择是将操作符设置为类成员还是普通非成员函数。在某些情况下,程序没有选择,操作符必须是成员;在另外一些情况下,有些经验可以指导我们做出决定。下面是一些指导:
a. 赋值(=),下标([]),调用(())和成员访问箭头(->)等操作符必须定义为成员,将这些操作符定义为非成员函数将在编译时标记为错误。
b. 像赋值一样,复合赋值操作符通常应定义为类的成员。与赋值不同的是,不一定非得这样做,如果定义为非成员复合赋值操作符,不会出现编译错误。
c. 改变对象状态或与给定类型紧密联系的其他一些操作符,如自增,自减和解引用,通常应定义为类成员。
d 对称的操作符,如算术操作符,相等操作符,关系操作符和位操作符,最好定义为普通非成员函数。
e io操作符必须定义为非成员函数,重载为类的友元。
#include <iostream>#include <string>using namespace std;class Fruit{public:friend ostream& operator << (ostream& os, const Fruit& f) ;friend istream& operator >> (istream& is, Fruit& f) ;protected:private:string name;string color;};ostream& operator << (ostream& os, const Fruit& f) { os << "The name is " << f.name << ". The colour is " << f.color << endl; return os; } istream& operator >> (istream& is, Fruit& f) { cout<<"请分别输入水果的名字和颜色"<<endl;is >> f.name >> f.color; if (!is) { cerr << "Wrong input!" << endl; } return is; } int main(){Fruit apple;cin>>apple; cout<<apple;return 0; }
注意::
1. <<输入重载:因为后边需要对对象的变量值进行收入,相当于修改了值,所以不能定义成const类型
2. >>输出重载:只是输出对象的值,并没有修改对象值,所以将对象一般定义成const类型
如何写成ostream operator << (ostream& os, const Fruit& f) ,
Fruit apple, banana;
cout<<apple<<banana是不对的,
第一个()中返回cout的临时变量,它可以不可以作为作值。因而错误。
必须写成ostream& operator <<(ostream& os, const Fruit& f)
acout<<apple返回cout的引用,即就是它自己,它可以再次作为左值。因而能够连着写这个输出流
- 重载输入输出操作符
- 重载输入输出操作符
- 输入输出操作符重载
- C++输入输出操作符的重载
- C++的输入输出操作符重载
- C++输入输出操作符的重载
- 【转】C++输入输出操作符的重载
- 【C++】输入输出运算符的重载
- C++ 重载输入输出操作符
- c++输入输出操作符重载
- C++输入输出操作符重载
- 操作符重载之输入输出重载
- 【C++】重载输入输出运算符
- VC++6.0下的输入输出操作符重载问题解决
- c++重载io输入输出操作符的一个简单例子
- 【C++面向对象】输入输出操作符的重载
- C++ 重载操作符- 02 重载输入输出操作符
- 输入输出运算符的重载
- rmvb seek后,刚开始几秒是seek之间的声音。
- 小心! 使用安卓版WhatsApp客户端可能会泄露你的隐私聊天历史记录
- TI WIKI各模块链接
- Air For IOS 滤镜的使用
- 如何编写一个高效的Java表达式求值程序
- C++的输入输出操作符重载
- 激活就挂了
- 需要编写支持英特尔 x86 的 Android* 游戏应用? 此处的样本可为您提供帮助!
- 单例模式与双重检测
- RTEMS 的 Console 的基本架构分析
- android开发教程——java concurrent处理并发需求
- 数据链路层
- 前端开发必须知道的JS闭包及应用
- java 第九天 面向对象(高级篇)