第11章 使用类

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值