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

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.必须将这三个字段的值作为参数传递,将结果在控制台上输出.
...全文
342 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++这种语义吧?
内容概要:本文围绕“基于杜鹃优化算法分时电价的综合能源系统双层协同调度研究”展开,结合Matlab代码实现,提出了一种融合杜鹃优化算法(Cuckoo Search Algorithm)与分时电价机制的综合能源系统双层协同优化调度模型。研究旨在通过需求响应机制优化能源资源配置,实现系统运行成本最小化与低碳化运行的双重目标。模型充分考虑了氢能、氨气等新型清洁能源的集成利用,体现了较强的创新性与前瞻性。研究内容涵盖综合能源系统建模、双层优化架构设计、多目标协同调度策略及智能算法求解全过程,并附有大量相关研究方向拓展,如储能选址定容、微电网调度、虚拟电厂优化、多目标智能优化算法应用等,展现出广泛的学术与工程应用价值。; 适合人群:具备电力系统、优化理论、能源管理及Matlab/Simulink编程基础的研究生、科研人员和工程技术人员,特别适合从事综合能源系统、需求响应、智能优化算法、低碳调度等方向研究的专业人士。; 使用场景及目标:① 为科研人员提供基于杜鹃优化算法的综合能源系统双层调度模型构建与仿真方法;② 探索分时电价与需求响应机制下,含氢能、氨气等新型能源的综合能源系统协同优化运行策略;③ 为解决储能配置、微电网经济调度、碳交易机制等实际工程问提供算法支持与代码参考; 其他说明:该研究成果属于“创新未发表”类别,突出算法的原创性与实践指导意义,可通过提供的网盘链接获取完整资源,建议读者结合文中列举的多种优化算法与应用场景进行深入学习与拓展研究。
内容概要:本文档聚焦于“配电网两阶段鲁棒故障恢复研究”,通过Matlab代码实现相关算法,旨在应对配电网中突发故障后的快速、可靠恢复问。研究采用鲁棒优化方法,有效应对可再生能源出力、负荷需求等不确定性因素,确保系统在最不利条件下仍能安全稳定运行。解决方案分为两个阶段:第一阶段为故障后的紧急响应与网络重构,核心目标是隔离故障区域并最大化重要负荷的供电恢复;第二阶段为灾后资源再调度,利用储能、可控分布式电源等进行精细化调整,以实现经济性与可靠性的最优平衡。文中提供的Matlab代码完整实现了建模、求解与仿真全过程,是对高水平学术论文的复现,兼具理论深度与实践价值。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及电力行业工程师。; 使用场景及目标:① 学习和掌握电力系统故障恢复、鲁棒优化、两阶段随机规划等高级理论与方法;② 复现顶刊论文的仿真案例,服务于自身课研究、论文撰写或技术汇报;③ 将核心算法思想迁移应用于微电网、主动配电网等新型电力系统的优化调度项目中。; 阅读建议:此资源以Matlab代码为核心载体,因此学习者应重点研读代码结构,结合电力系统专业知识理解其背后的数学模型与物理意义。建议读者先梳理清楚“故障恢复”的整体流程,再分模块(如潮流计算、约束定义、优化求解器调用)进行代码调试与分析,通过修改参数和算例来加深理解。

111,132

社区成员

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

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

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