新手求救,一道操作符重载的题,急呀!

kising 2008-07-28 11:59:53
创建有以下数据成员的类:Time

标识符 类型
Hours Integer
Minutes Integer
Seconds Integer

重载+操作符,用于将Seconds字段中包含的值加1.当Seconds的值等于60时,将Minutes的值加1,然后将Seconds的值置为0.
同样,当Minutes的值为60时,必须执行以下操作:
1.Minutes的值回复为0;
2.Seconds的值回复为0;
3.Hours的值增加1;

当Hours的值等于24时,所有三个字段的值必须回复为0.必须将这三个字段的值作为参数传递,将结果在控制台上输出.
...全文
197 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
atlasroben 2008-07-29
  • 打赏
  • 举报
回复
那么更简单
public class Complex
{
public int _sec = 0;
public int _min = 0;
public int _hour = 0;


public Complex(int sec, int min, int hour)
{
if (sec >= 60)
{
_sec = sec % 60;
_min += sec / 60;
}
else
{
_sec = sec;
}

_min += min;
if (_min >= 60)
{
_hour += _min / 60;
_min = _min % 60;

}

_hour += hour;
}
public static Complex operator +(Complex c1, int i)
{

return new Complex(c1._sec+i, c1._min, c1._hour);
// return c3;
}

}


调用代码
  Complex com = new Complex(50, 58, 0);
private void button2_Click(object sender, EventArgs e)
{
com += 1;
this.button1.Text = com._hour.ToString() + "/" + com._min.ToString() + "/" + com._sec.ToString();


}
kising 2008-07-29
  • 打赏
  • 举报
回复
非常感谢你大半夜的还抽时间给我解决问题,你的分数肯定是少不了的了,呵呵
但是,我测试过你的代码了,好像没有达到我的要求,题目要求的是重载+操作符,只用于将Seconds字段中包含的值加1
我试过了,好像不好使.
kising 2008-07-29
  • 打赏
  • 举报
回复
哪位高手帮忙解决了另加100分!
wdgphc 2008-07-29
  • 打赏
  • 举报
回复
顶 atlasroben 的代码,但是看楼主要求是不是实现加int的操作啊.


public static Complex operator +(Complex c1, int i)
{
//... ...
}
kising 2008-07-29
  • 打赏
  • 举报
回复
哇噻,@atlasroben你太牛了,呵呵!高分奉上啦,非常感谢!!!
我把你写的代码整理了一下,作业终于完成了

using System;
using System.Threading;

/// <summary>
/// 第四章 作业题2 - 操作符重载
/// </summary>
public class Time
{
public int _sec = 0;
public int _min = 0;
public int _hour = 0;

public Time(int sec, int min, int hour)
{
//判断时分秒是否为负数;
//到60秒时,秒数清0,分钟数+1;到60分时,分钟数清0,小时+1;到24小时后,时分秒都清零;
if (sec >= 60)
{
_sec = sec % 60;
_min += sec / 60;
}
else
{
_sec = sec;
}

_min += min;
if (_min >= 60)
{
_hour += _min / 60;
_min = _min % 60;
}

_hour += hour;
if (_hour >= 24)
{
_hour = _hour % 24;
}
}

// 声明要重载的运算符 (+)、
// 可相加的类型:一个 Time 对象,一个整数
// 返回类型 (Time):
public static Time operator +(Time c1, int i)
{
return new Time(c1._sec + i, c1._min, c1._hour);
}
}

public class Tests
{
public static void Main()
{
//初始化
Time com = new Time(55, 58, 23);
Console.WriteLine(com._hour.ToString() + "/" + com._min.ToString() + "/" + com._sec.ToString());

//将当前线程阻止两秒后再开始循环
Thread.Sleep(2000);

//循环测试,秒数每次加1
for (; com._hour < 200; com+=1)
{
Console.WriteLine(com._hour.ToString() + "/" + com._min.ToString() + "/" + com._sec.ToString());
//将每次循环的间隔设置为200毫秒
Thread.Sleep(200);
}
}
}
atlasroben 2008-07-29
  • 打赏
  • 举报
回复
记得另加100分啊,半夜给你写的 T_T 自己测试哈,有问题叫我

public class Complex
{
public int _sec = 0;
public int _min = 0;
public int _hour = 0;


public Complex(int sec, int min, int hour)
{
if (sec >= 60)
{
_sec = sec % 60;
_min += sec / 60;
}
else
{
_sec = sec;
}

_min += min;
if (_min >= 60)
{
_hour += _min / 60;
_min = _min % 60;

}

_hour += hour;
}
public static Complex operator +(Complex c1, Complex c2)
{
int intSec = 0;
int intMin = 0;
int intHour = 0;
if (c1._sec + c2._sec >= 60)
{
intSec = (c1._sec + c2._sec )% 60;
intMin += (c1._sec + c2._sec) / 60;

}
if (c1._min + c2._min + intMin >= 60)
{
intHour +=( c1._min + c2._min + intMin )/ 60;
intMin = (c1._min + c2._min + intMin) % 60;

}
intHour += c1._hour + c2._hour;
return new Complex(intSec, intMin, intHour);
// return c3;
}

}


调用方法

Complex cc = new Complex(23, 34, 0);
Complex c1 = new Complex(37, 34, 0);
Complex c3 = cc + c1;
MessageBox.Show(c3._hour.ToString()+"/"+ c3._min.ToString()+"/"+c3._sec.ToString());
atlasroben 2008-07-29
  • 打赏
  • 举报
回复
调用方法如下:按你的需求重写运算符++
//下面是溢出值的测试
Complex com = new Complex(70, 80, 12);
//下面是24小时的清零测试
Complex com = new Complex(50, 58, 23);
//你初始化选上面一种就行了
private void button2_Click(object sender, EventArgs e)
{
this.button2.Text = com._hour.ToString() + "/" + com._min.ToString() + "/" + com._sec.ToString();
Application.DoEvents();
Thread.Sleep(3000);

for (; com._hour < 200; com++)
{
this.button2.Text = com._hour.ToString() + "/" + com._min.ToString() + "/" + com._sec.ToString();
Thread.Sleep(100);
Application.DoEvents();
}

// dtUserBindingSource.DataSource = ds2;
// dtUserBindingSource.Add(ds);
//dtUserBindingSource.Add(ds2);
//Complex cc = new Complex(23, 34, 0);
//Complex c1 = new Complex(37, 34, 0);
//Complex c3 = cc + c1;
//MessageBox.Show(c3._hour.ToString()+"/"+ c3._min.ToString()+"/"+c3._sec.ToString());

}


代码:已经帮你判断了是不是负数,到24小时清零,都已经判断过了!如果超过值会自动累加的!
[code=C#] public class Complex
{
public uint _sec = 0;
public uint _min = 0;
public uint _hour = 0;


public Complex(uint sec, uint min, uint hour)
{
if (sec >= 60)
{
_sec = sec % 60;
_min += sec / 60;
}
else
{
_sec = sec;
}

_min += min;
if (_min >= 60)
{
_hour += _min / 60;
_min = _min % 60;

}

_hour += hour;
if (_hour >= 24)
{
_hour = _hour %24;
}
}
public static Complex operator ++(Complex c1)
{

return new Complex(c1._sec+1, c1._min, c1._hour);
// return c3;
}

}

[/code]
kising 2008-07-29
  • 打赏
  • 举报
回复
@yeahspyme
是的,类似于你说的这样子.
还有就是Complex类的构造函数里也要判断初始值吧,我改了一下@atlasroben先生的代码
public Complex(int sec, int min, int hour)
{
if (sec >= 60)
{
_sec = 0;
_min += 1;
if (_min >= 60)
{
_min = 0;
_hour += 1;
if (_hour >= 24)
{
_sec = 0;
_min = 0;
_hour = 0;
}
}
}
else
{
_sec = sec;
}

if (min >= 60)
{
_min = 0;
_hour += 1;
if (_hour >= 24)
{
_sec = 0;
_min = 0;
_hour = 0;
}
}
else
{
_min = min;
}
if (hour >= 24)
{
_sec = 0;
_min = 0;
_hour = 0;
}
else
{
_hour = hour;
}
}

太长了,太啰嗦了,不知道怎么优化.还有就是当min加1后还要再判断一次它们的值是否等于60或是24.
可能我的表述不是太清楚,让@atlasroben又写了一次,我是新人嘛,要多多理解哈
yeahspyme 2008-07-29
  • 打赏
  • 举报
回复
楼主的意思是类似i++这种语义吧?

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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