协助重载操作员
Posted
技术标签:
【中文标题】协助重载操作员【英文标题】:Assistance with overloaded operators 【发布时间】:2014-05-01 01:31:22 【问题描述】:我将直接从我的作业表中输入问题,我不是在寻找整个问题的确切代码,我确实需要帮助找出重载运算符,但重载 + 数学运算符的示例语法是有利。问题来了……
* 就我所知表示完整。
***Time 类包括两个整数成员变量(Hour 和 Minute),mutator 函数 setHour 和 setMinute,以及访问器函数 getHour 和 getMinute。这些函数应该是内联的。
***时间类还应该包括两个构造函数和一个析构函数。默认构造函数应将小时和分钟初始化为 0,并显示消息“来自默认构造函数的您好”。第二个构造函数应该为小时和分钟赋值。析构函数应该显示消息“再见析构函数”这些函数也应该是内联的。
现在为了添加和减去小时和分钟的数量,添加一个重载标准 + 数学运算符的运算符 + 函数和一个重载标准 - 数学运算符的运算符 - 函数。 ***你们都需要添加一个简化函数,它检查分钟内大于 59 或小于 0 的值,并相应地处理它们到小时。示例 2 小时和 65 分钟将给出 3 小时和 5 分钟。这些函数不应该是内联的。
主程序会创建三个时间对象(time1, time2, time3) 提示用户输入两次时间,分别存储在第一个和第二个对象中。然后将添加第一个和第二个对象并放置在第三个对象中然后显示,然后减去放置在第三个对象中然后显示。使用带有第三个对象声明的默认构造函数和带有第一个和第二个对象声明的重载构造函数。
* 分配结束*****
* 起始代码*****
#include<iostream>
#include<cstdlib>
using namespace std;
class TIME
private:
int min;
int hour;
public:
void tickTime();
void simplify();
TIME operator +();
TIME operator -();
TIME()
min = 0;
hour = 0;
cout << "Hello!!! From constructor\n";
TIME(int h, int m)
hour = h;
min = m;
~TIME()
cout << "Goodbye!!! From destructor.\n";
system("pause");
void setMin ( int m )
min = m;
void setHour (int h)
hour = h;
int getMin() const
return min;
int getHour() const
return hour;
;
void TIME :: tickTime()
min++;
if (min>59)
min=00;
hour++;
if (hour>23)
hour = 00;
return;
void TIME :: simplify()
if (min>=60)
hour += (min/60);
min = min % 60;
else if (min < 0)
hour -= ((abs(min) / 60) + 1);
min = 60 - (abs(min) % 60);
if (hour>23)
hour = 00;
return;
TIME TIME:: operator+()
return;
TIME TIME:: operator-()
return;
int main()
int min, hour;
TIME t;
int i, h, m;
cout << "Enter Hour: ";
cin >> h;
cout << "Enter Minute: ";
cin >> m;
t.setHour(h);
t.setMin(m);
cout << endl << endl;
for (i=1; i<=5; i++)
t.simplify();
t.tickTime();
cout << t.getHour() << ":" << t.getMin() << endl << endl;
system("pause");
return 0;
***结束代码***
**当前样本输出*** 你好!!!从构造函数 输入时间:9 输入分钟:29
9:30
9:31
9:32
9:33
9:34
按任意键继续。 . . 再见!!!从析构函数。 按任意键继续 。 . . ***样本输出结束***
感谢您的帮助,我真的只是不了解重载,但我想我将能够弄清楚对象和所有其他有趣的东西。
【问题讨论】:
你能具体说明什么是不工作的,并从这些部分发布代码 sn-ps 吗? 看看这里:***.com/questions/4421706/operator-overloading?rq=1 但问题是我不知道如何帮助你,因为我不知道你想要/期望什么 我不知道重载运算符的语法是什么样的,所以我相信示例语法会对我有所帮助,但就像我说的,我真的不想为我解决具体问题,我只是想要一些关于专业程序员如何解决这个问题的指导。 OP:您对指导的担忧当然是有道理的。然而,计算只是一种抽象,并且在大多数情况下是不确定的。这意味着,对于您希望做什么或不做,您必须有一个意图。因此,任何基于此的代码和指针都将限于此。为什么?运算符重载只是达到目的的一种手段。 TL;DR:你想做什么?举个例子。 可以使用重载运算符添加,我的语法应该是什么样子,如果我尝试添加两个小时和分钟,使用重载运算符会是什么样子? 【参考方案1】:重载运算符用于添加两个 TIME
对象并从另一个对象中减去 TIME
对象:
TIME operator+(TIME const& rhs) const;
TIME operator-(TIME const& rhs) const;
您需要 const
成员函数和 TIME const&
作为参数,因为当您这样做时:
TIME c = a + b;
您希望能够处理a
和b
是const
对象的情况。
在实现中:
TIME TIME::operator+(TIME const& rhs) const
TIME res;
// Compute the resultant
// ...
// Return the resultant
return res;
TIME TIME::operator-(TIME const& rhs) const
TIME res;
// Compute the resultant
// ...
// Return the resultant
return res;
现在您可以添加和减去 TIME
的实例。
【讨论】:
而且,一般来说,数学运算符应该是const
并接受const
,因为它们不应该是mutators,尽管没有要求它们是这样的。【参考方案2】:
您的实现将如下所示:-
TIME TIME::operator+(TIME const& rhs) const
TIME res;
res.hour = this->hour + rhs.hour;
res.min = this->min + rhs.min;
return res;
TIME TIME::operator-(TIME const& rhs) const
TIME res;
res.hour = this->hour - rhs.hour;
res.min = this->min - rhs.min;
return res;
其中“this”是 LHS 上的对象。
【讨论】:
以上是关于协助重载操作员的主要内容,如果未能解决你的问题,请参考以下文章
CountDownLatchCyclicBarrierSemaphore多线程协助操作API
CountDownLatchCyclicBarrierSemaphore多线程协助操作API