C++的流插入运算符“<<”和流提取运算符“>>”是C++在类库中提供的,所有C++编译系统都在类库中提供输入流类istream和输出流类ostream。cin和cout分别是istream类和ostream类的对象。在类库提供的头文件中已经对“<<”和“>>”进行了重载,使之作为流插入运算符和流提取运算符,能用来输出和输入C++标准类型的数据。因此,凡是用“cout<<”和“cin>>”对标准类型数据进行输入输出的,都要用#include 把头文件包含到本程序文件中。
用户自己定义的类型的数据,是不能直接用“<<”和“>>”来输出和输入的。如果想用它们输出和输入自己声明的类型的数据,必须对它们重载。
对“<<”和“>>”重载的函数形式如下:
istream & operator >> (istream &, 自定义类 &);
ostream & operator << (ostream &, 自定义类 &);
即重载运算符“>>”的函数的第一个参数和函数的类型都必须是istream&类型,第二个参数是要进行输入操作的类。重载“<<”的函数的第一个参数和函数的类型都必须是ostream&类型,第二个参数是要进行输出操作的类。因此,只能将重载“>>”和“<<”的函数作为友元函数或普通的函数,而不能将它们定义为成员函数
重载流插入运算符“<<”
在程序中,人们希望能用插入运算符“<<”来输出用户自己声明的类的对象的信息,这就需要重载流插入运算符“<<”。
用重载的“<<”输出复数
#include <iostream>
using namespace std;
class Complex
{
public:
Complex( ){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
Complex operator + (Complex &c2); //运算符“+”重载为成员函数
friend ostream& operator << (ostream&,Complex&); //运算符“<<”重载为友元函数
private:
double real;
double imag;
};
Complex Complex::operator + (Complex &c2)//定义运算符“+”重载函数
{
return Complex(real+c2.real,imag+c2.imag);
}
ostream& operator << (ostream& output,Complex& c) //定义运算符“<<”重载函数
{
output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;
return output;
}
int main( )
{
Complex c1(2,4),c2(6,10),c3;
c3=c1+c2;
cout<<c3;
return 0;
}
当然啦,前面的文字都是我从别的地方摘抄的,我自己懒得写,
有一个值得注意的地方是,就是如如果你在一个类里面重载了<<的友元函数
在输出的这个类的对象的时候,如果这个对象是指针的形式,要记得加*表明是这个类对象的内容,不然就会输出这个指针的地址
int _tmain(int argc, _TCHAR* argv[])
{
Matrix *pMatrix_test;
pMatrix_test = new Matrix(4,4,1);
cout<< *pMatrix_test; //注意要加* 不然气死个人
delete pMatrix_test;
return 0;
}