运算符重载与友元

Keep in mind that you must choose one or the other form when defining a given operator,but not both.

加法:operator+

以class Time为例:

T1 = T2 + T3;

--> T1 = T2.operator+(T3); // member function

--> T1 = operator+(T2, T3); // nonmember function

member function:

class Time
{
private:
    int hours;
    int minutes;
public:
    Time();
    Time(int h, int m = 0);
    Time operator+(const Time&) const;
    //friend Time operator+(const Time&, const Time&); // the other form
    void Show() const;
};
Time Time::operator+(const Time &t) const // implemention
{
    Time temp;
    temp.minutes = minutes + t.minutes;
    temp.hours = hours + t.hours + temp.minutes/60;
    temp.minutes %= 60;
    return temp;
}

main.cpp 如下:

int main(void)
{
    Time coding(2, 55);
    Time fixing(5, 40);
    Time total;
    total = coding + fixing; // 1
    total.Show();
    total = coding.operator+(fixing); // 2
    total.Show();
    return 0;
}

nonmember function:

class Time
{
private:
    int hours;
    int minutes;
public:
    Time();
    Time(int h, int m = 0);
    //Time operator+(const Time&) const; // the other form
    friend Time operator+(const Time&, const Time&);
    void Show() const;
};
Time operator+(const Time &t1, const Time &t2) // implemention
{
    Time temp;
    temp.minutes = t1.minutes + t2.minutes;
    temp.hours = t1.hours + t2.hours + temp.minutes/60;
    temp.minutes %= 60;
    return temp;
}
main.cpp如下:

int main(void)
{
    Time coding(2, 55);
    Time fixing(5, 40);
    Time total;
    total = coding + fixing;
    total.Show();
    //total = coding.operator+(fixing); // error: 'class Time' has no member named 'operator+'
    //total.Show();
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值