C++输入输出操作符重载的深入分析
C++ 深入分析 操作符 重载 输入输出
2023-06-13 09:15:00 时间
如:intoperator+(int,int),不可以
2.为类设计重载操作符的时候,必须选择是将操作符设置为类成员还是普通非成员函数。在某些情况下,程序没有选择,操作符必须是成员;在另外一些情况下,有些经验可以指导我们做出决定。下面是一些指导:
a.赋值(=),下标([]),调用(())和成员访问箭头(->)等操作符必须定义为成员,将这些操作符定义为非成员函数将在编译时标记为错误。
b.像赋值一样,复合赋值操作符通常应定义为类的成员。与赋值不同的是,不一定非得这样做,如果定义为非成员复合赋值操作符,不会出现编译错误。
c.改变对象状态或与给定类型紧密联系的其他一些操作符,如自增,自减和解引用,通常应定义为类成员。
d对称的操作符,如算术操作符,相等操作符,关系操作符和位操作符,最好定义为普通非成员函数。
eio操作符必须定义为非成员函数,重载为类的友元。
//OverloadCinCout.cpp:定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include"iostream"
#include"string"
usingnamespacestd;
classFruit
{
public:
Fruit(conststring&nst="apple",conststring&cst="green"):name(nst),colour(cst){}
~Fruit(){}
friendostream&operator<<(ostream&os,constFruit&f); //输入输出流重载,不是类的成员,
friendistream&operator>>(istream&is,Fruit&f); //所以应该声明为类的友元函数
private:
stringname;
stringcolour;
};
ostream&operator<<(ostream&os,constFruit&f)
{
os<<"Thenameis"<<f.name<<".Thecolouris"<<f.colour<<endl;
returnos;
}
istream&operator>>(istream&is,Fruit&f)
{
is>>f.name>>f.colour;
if(!is)
{
cerr<<"Wronginput!"<<endl;
}
returnis;
}
int_tmain(intargc,_TCHAR*argv[])
{
Fruitapple;
cout<<"Inputthenameandcolourofakindoffruit."<<endl;
cin>>apple;
cout<<apple;
return0;
}
相关文章
- c++截取字符串[通俗易懂]
- C++ STL map集合的使用「建议收藏」
- 【vscode】配置c++环境
- C++ fstream详解[通俗易懂]
- C++stl库_c++库
- C++基本概念_c语言 c++区别
- C++结构体和类的区别_c++有结构体吗
- C/C++ ImGUI劫持Dx9绘制窗体
- c 线程安全的单例模式-C++单例模式(线程安全、内存释放)
- 为什么永远不会有语言取代 C / C++ ?
- 【C++】STL简介 -- string 的使用及其模拟实现
- C++:AVL树
- xcode c++
- C++箴言:避免构造或析构函数中调用虚函数详解编程语言
- RPC与实践(thrift在windows的编译/安装–c++版)详解编程语言
- C++ protected(受保护的)详解
- 深入分析C++中类的大小
- 从汇编看c++中变量类型的深入分析
- 深入C++四种强制类型转换的总结
- 深入分析C++中几个最不常用的关键字
- 虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析
- C++处理键盘输入的方法
- C++判断pe文件实例
- VC++的combobox控件用法汇总