关于C++操作符重载

wxdcxp 2009-09-25 01:54:28
如何理解操作符左侧的对象是调用对象,操作符右侧对象是作为被参数传递对象?
另外如何理解这句: Total = Coding.sum(fixing)
以下代码摘自C++ primer 5th

// mytime0.cpp -- implementing Time methods
#include <iostream>
#include "mytime0.h"

Time::Time()
{
hours = minutes = 0;
}

Time::Time(int h, int m )
{
hours = h;
minutes = m;
}

void Time::AddMin(int m)
{
minutes += m;
hours += minutes / 60;
minutes %= 60;
}
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 %= 60;
return sum;
}

void Time::Show() const
{
std::cout << hours << " hours, " << minutes << " minutes";
}

// mytime0.h -- Time class before operator overloading
#ifndef MYTIME0_H_
#define MYTIME0_H_

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;
};
#endif

// usetime0.cpp -- using the first draft of the Time class
// compile usetime0.cpp and mytime0.cpp together
#include <iostream>
#include "mytime0.h"

int main()
{
using std::cout;
using std::endl;
Time planning;
Time coding(2, 40);
Time fixing(5, 55);
Time total;

cout << "planning time = ";
planning.Show();
cout << endl;

cout << "coding time = ";
coding.Show();
cout << endl;

cout << "fixing time = ";
fixing.Show();
cout << endl;

total = coding.Sum(fixing); cout << "coding.Sum(fixing) = ";
total.Show();
cout << endl;

return 0;
}
...全文
88 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
illuminati 2009-09-25
  • 打赏
  • 举报
回复
如何理解操作符左侧的对象是调用对象,操作符右侧对象是作为被参数传递对象?
应该主要针对运算符重载而言
Total = Coding.sum(fixing)
无非就是调用coding对象的这个成员函数
Time Time::Sum(const Time & t) const
{
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes / 60;
sum.minutes %= 60;
return sum;
}
lnuyasha_hrb 2009-09-25
  • 打赏
  • 举报
回复
C++中的操作符是对对象而言的,一般操作符的重载发生在类或函数中.
如对于2目运算符来说,需要2个操作数,其中一个操作数是对象本身(this),而另一个操作数就是需要传递的参数
wxdcxp 2009-09-25
  • 打赏
  • 举报
回复
感谢各位,不看object-oriented programming in c++这本书了,对this指针介绍的太少了。

pengzhixi 2009-09-25
  • 打赏
  • 举报
回复
看看this指针那一节内容介绍
taodm 2009-09-25
  • 打赏
  • 举报
回复
嗯?C++ Primer第五版?
是时空穿越还是雕牌周住牌分不清?
cphj 2009-09-25
  • 打赏
  • 举报
回复
total = coding.Sum(fixing);
C++编译器会翻译成类似这样:
total = Time_Sum(&coding, fixing);
&coding就是this指针的值,fixing的引用传给t
Sum函数计算完成之后返回值会复制给total对象


如何理解操作符左侧的对象是调用对象,操作符右侧对象是作为被参数传递对象?

例如A类重载了operator+(const A & a)
A a, b, c;
c = a + b;
C++编译器会翻译成类似这样:
C = A_operator+(&a, b);

64,684

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧