一、输入输出流重载
#include <iostream>
using namespace std;
class Date
{
public:
Date(int y,int m,int d) {Year=y;Month=m;Day=d;}
//仅此一种声明方式,去掉任何一个&都会出错,why?
friend ostream& operator<<(ostream &stream,Date &date);
//第一个参数不是类对象,不能声明为成员函数,只能是友元函数
friend istream& operator>>(istream &stream,Date &date);
private:
int Year,Month,Day;
};
ostream &operator<<(ostream &stream,Date &date)
{
stream<<date.Year<<"/"<<date.Month<<"/"<<date.Day<<endl;
return stream;
}
istream& operator>>(istream &stream,Date &date)
{
stream>>date.Year>>date.Month>>date.Day;
return stream;
}
void main()
{
Date Cdate(2004,1,1);
cout<<"Current date:"<<Cdate<<endl;
cout<<"Enter new date:";
cin>>Cdate;
cout<<"New date:"<<Cdate<<endl;
system("pause");
}
二、下标运算符重载
#include <iostream>
using namespace std;
class Demo
{
int Vector[5];
public:
Demo() {};
int &operator[ ](int i){return Vector[i];} //&引用返回值
};
void main()
{
Demo v;
for(int i=0;i<5;i++)
v[i]=i+1; //&引用的返回值可以作左值使用
for(int i=0;i<5;i++)
cout<<v[i]<<" ";
cout<<endl;
getchar();
}