1.运算符重载(未使用重载的例子)
#include<iostream>
using namespace std;
class Time
{
private:
int hours;
int minutes;
public:
Time();
Time(int h,int m=0);
void addmin(int m);
void addhr(int h);
void reset(int h=0,int m=0);
Time Sum(const Time &t)const;
void show()const;
};
Time::Time()
{
hours=minutes=0;
}
Time::Time(int h,int m)
{
hours=h;
minutes=m;
}
void Time::addmin(int m)
{
minutes=m;
}
void Time::addhr(int h)
{
hours=h;
}
void Time::reset(int h,int m)
{
hours=h;
minutes=m;
}
Time Time::Sum(const Time &t)const
{
Time sum; //定义了一个对象,并给这个对象赋值,最后返回这个对象。
sum.minutes=minutes+t.minutes;
sum.hours=hours+t.hours+sum.minutes/60;
sum.minutes=sum.minutes%60;
return sum;
}
void Time::show()const
{
cout<<hours<<" hours, "<<minutes<<" minutes";
}
int main()
{
Time plan;
Time code(2,40);
Time fix(5,55);
Time total;
cout<<"plan time=";
plan.show();
cout<<endl;
cout<<"code time=";
code.show();
cout<<endl;
cout<<"fix time=";
fix.show();
cout<<endl;
total=code.Sum(fix); // 用total来接收返回的对象。
cout<<"code.Sum(fix)=";
total.show();
cout<<endl;
return 0;
}
2.使用重载的例子。
#include<iostream>
using namespace std;
class Time
{
private:
int hours;
int minutes;
public:
Time();
Time(int h,int m=0);
void addmin(int m);
void addhr(int h);
void reset(int h=0,int m=0);
Time operator+(const Time &t)const;//运算符重载
Time operator-(const Time &t)const;
void show()const;
};
Time::Time()
{
hours=minutes=0;
}
Time::Time(int h,int m)
{
hours=h;
minutes=m;
}
void Time::addmin(int m)
{
minutes=m;
}
void Time::addhr(int h)
{
hours=h;
}
void Time::reset(int h,int m)
{
hours=h;
minutes=m;
}
Time Time::operator+(const Time &t)const
{
Time sum;
sum.minutes=minutes+t.minutes;
sum.hours=hours+t.hours+sum.minutes/60;
sum.minutes=sum.minutes%60;
return sum;
}
Time Time::operator-(const Time &t)const
{
Time diff;
int total1,total2;
total1=minutes+hours*60;
total2=t.minutes+hours*60;
diff.hours=(total1-total2)/60;
diff.minutes=(total1-total2)%60;
return diff;
}
void Time::show()const
{
cout<<hours<<" hours, "<<minutes<<" minutes";
}
int main()
{
Time plan;
Time code(2,40);
Time fix(5,55);
Time total;
Time diff;
cout<<"plan time=";
plan.show();
cout<<endl;
cout<<"code time=";
code.show();
cout<<endl;
cout<<"fix time=";
fix.show();
cout<<endl;
total=code+fix;
cout<<"code+fix=";
total.show();
cout<<endl;
diff=fix-code;
cout<<"fix-code=";
diff.show();
cout<<endl;
return 0;
}
3.友元函数:不是成员函数,但有与成员函数相同的访问权限,不能使用成员运算符来调用。
#include<iostream>
using namespace std;
class Time
{
private:
int hours;
int minutes;
public:
Time();
Time(int h,int m=0);
void addmin(int m);
void addhr(int h);
void reset(int h=0,int m=0);
Time operator+(const Time &t)const;//运算符重载
Time operator-(const Time &t)const;
Time operator*(double n)const;
friend Time operator*(double m,const Time &t)//用来进行10*t;
{
return t*m; //用到了上面一个对*的重载t.operator(m);
}
friend ostream &operator<<(ostream &os,const Time &t);//用来进行cout<<trip;(trip为一个对象)
//void show()const;
};
Time::Time()
{
hours=minutes=0;
}
Time::Time(int h,int m)
{
hours=h;
minutes=m;
}
void Time::addmin(int m)
{
minutes=m;
}
void Time::addhr(int h)
{
hours=h;
}
void Time::reset(int h,int m)
{
hours=h;
minutes=m;
}
Time Time::operator+(const Time &t)const //对象调用它,它再调用对象的成员变量
{
Time sum;
sum.minutes=minutes+t.minutes;
sum.hours=hours+t.hours+sum.minutes/60;
sum.minutes=sum.minutes%60;
return sum;
}
Time Time::operator-(const Time &t)const
{
Time diff;
int total1,total2;
total1=minutes+hours*60;
total2=t.minutes+hours*60;
diff.hours=(total1-total2)/60;
diff.minutes=(total1-total2)%60;
return diff;
}
Time Time::operator*(double n)const
{
Time result;
int totalminutes;
totalminutes=hours*n*60+minutes*n;
result.minutes=totalminutes%60;
result.hours=totalminutes/60;
return result;
}
ostream &operator<<(ostream &os,const Time &t)
{
os<<t.hours<<" hours,"<<t.minutes<<" minutes";
return os;
}
/*void Time::show()const
{
cout<<hours<<" hours, "<<minutes<<" minutes";
}*/
int main()
{
Time plan;
Time code(2,40);
Time fix(5,55);
Time total;
Time diff;
Time temp;
cout<<"plan time=";
cout<<plan<<endl;
//plan.show();
cout<<"code time=";
cout<<code<<endl;
cout<<"fix time=";
cout<<fix<<endl;
total=code+fix;
cout<<"code+fix=";
cout<<total<<endl;
diff=fix-code;
cout<<"fix-code=";
cout<<diff<<endl;
//temp=code*10;
cout<<"code*10="<<code*10<<endl;
//temp=5*code;
cout<<"5*code="<<5*code<<endl;
return 0;
}
4.复数类的运算符重载和友元函数
#include<iostream>
#include<string>
using namespace std;
class Complex
{
private:
double real;
double imag;
public:
Complex();
Complex(double r,double i);
Complex operator+(const Complex &c)const;
Complex operator-(const Complex &c)const;
friend Complex operator*(const Complex &a,const Complex &b); //要是函数有两个参数一定要声明为友元函数,否则只能有一个参数
friend Complex operator*(double n,Complex &c); //非成员函数不能使用const
friend istream &operator>>(istream &is,Complex &c);
friend ostream &operator<<(ostream &os,const Complex &c);
};
Complex::Complex()
{
real=0;
imag=0;
}
Complex::Complex(double r,double i)
{
real=r;
imag=i;
}
Complex Complex::operator+(const Complex &c)const
{
Complex add; //如果没有默认构造函数 不能用它
add.real=real+c.real;
add.imag=imag+c.imag;
return add;
}
Complex Complex::operator-(const Complex &c)const
{
Complex diff; //如果没有默认构造函数 不能用它
diff.real=real-c.real;
diff.imag=imag-c.imag;
return diff;
}
Complex operator*(const Complex &a,const Complex &b)
{
Complex mul;
mul.real=a.real*b.real-a.imag*b.imag;
mul.imag=a.real*b.imag+a.imag*b.real;
return mul;
}
Complex operator*(double n,Complex &c)
{
c.real=n*c.real;
c.imag=n*c.imag;
return c;
}
ostream &operator<<(ostream &os,const Complex &c)
{
os<<"c is ("<<c.real<<","<<c.imag<<"i)"<<endl;
return os;
}
istream &operator>>(istream &is,Complex &c) //千万不能用const!!!
{
cout<<"real:";
is>>c.real;
cout<<endl;
cout<<"imaginary:";
is>>c.imag;
return is;
}
int main()
{
Complex a(3.0,4.0);
Complex b(4.0,5.0);
cout<<"a+b="<<a+b;
cout<<"a-b="<<a-b;
Complex c;
cout<<"Enter a complex number(q to quie):";
cin>>c;
while(cin.good()) //cin.goog()和cin.fail()都很好使,哈哈!
{
cout<<"c is "<<c<<endl;
cout<<"a+c:"<<a+c<<endl;
cout<<"a-c:"<<a-c<<endl;
cout<<"2*c:"<<2*c<<endl;
cout<<"a*c:"<<a*c<<endl;
cin>>c;
cout<<"Enter a complex number(q to quie):";
}
return 0;
}