C++试题:声明和实现一个时间类time24。

2025-04-29 16:24:34
推荐回答(2个)
回答1:

#include
#include

struct invalid_time : std::exception { char const* what() const throw() { return "invalid time value!"; } };
struct bad_time_format : std::exception { char const* what() const throw() { return "bad time format!"; } };

class time24
{
public:
time24();
time24(unsigned hour, unsigned min);
~time24();

void set(unsigned hour, unsigned min);
void add_min(unsigned min);

unsigned hour() const;
unsigned min() const;

private:
unsigned _hour;
unsigned _min;

friend bool operator==(time24 const&, time24 const&);
};

time24::time24()
: _hour(0), _min(0)
{
}

time24::time24(unsigned hour, unsigned min)
: _hour(0), _min(0)
{
set(hour, min);
}

time24::~time24()
{
}

void time24::set(unsigned hour, unsigned min)
{
if( hour>23 || min>59 )
throw invalid_time();

_hour = hour;
_min = min;
}

void time24::add_min(unsigned min)
{
unsigned dh = (_min + min) / 60;

_hour = (_hour + dh) % 24;
_min = (_min + min) % 60;
}

unsigned time24::hour() const
{
return _hour;
}

unsigned time24::min() const
{
return _min;
}

time24& operator+(time24& t, unsigned min)
{
t.add_min(min);
return t;
}

time24& operator+(unsigned min, time24& t)
{
return operator+(t, min);
}

bool operator==(time24 const& lhs, time24 const& rhs)
{
return lhs._hour == rhs._hour
&& lhs._min == rhs._min;
}

std::ostream& operator<<(std::ostream& os, time24 const& t)
{
os << t.hour() << ":" << t.min();
return os;
}

std::istream& operator>>(std::istream& is, time24& t)
{
char c;
unsigned h, m;

is >> h >> c >> m;
if( c != ':' )
throw bad_time_format();
t.set( h, m );

return is;
}

int main()
{
try
{
time24 a, b;

//使用重载的>>输入时间,格式为: 小时:分钟
std::cout << "please input time a: ";
std::cin >> a;

std::cout << "please input time b: ";
std::cin >> b;

//使用重载<<输出a,b两个时间值
std::cout << "time a is: " << a << std::endl;
std::cout << "time b is: " << b << std::endl;

//使用operator==判断输入的两个时间是否相等
if( a == b )
std::cout << "time a == time b" << std::endl;
else
std::cout << "time a <> time b" << std::endl;

//输入一个整形值,用于测试对时间的加运算符
unsigned addMin;
std::cout << std::endl << "please input a integer: ";
std::cin >> addMin;

a = a + addMin;
b = b + addMin;
std::cout << "time a + " << addMin << " minute = " << a << std::endl;
std::cout << "time b + " << addMin << " minute = " << b << std::endl;
}
catch( std::exception const& err )
{
std::cout << "Error: " << err.what() << std::endl;
}

std::cin.clear();
std::cin.get();
return 0;
}

//运行结果
please input time a: 16:50
please input time b: 22:10
time a is: 16:50
time b is: 22:10
time a <> time b

please input a integer: 2222
time a + 2222 minute = 5:52
time b + 2222 minute = 11:12
请按任意键继续. . .

上次帮你做作业已经是在害你了,main很简单,就是按题目要求演示这个类的使用,这个你自己思考下很容易写出来的

回答2:

把类的实现也修改了下

#include
#include
using namespace std;

class invalid_time : std::exception {};

class time24
{
public:
friend std::ostream& operator<<(std::ostream& os, time24 const& t);
friend std::istream& operator>>(std::istream& is, time24 &t);
friend bool operator==(time24 const&, time24 const&);

time24();
time24(unsigned hour, unsigned min);
~time24();

void set(unsigned hour, unsigned min);
void add_min(unsigned min);

unsigned hour() const;
unsigned min() const;

private:
unsigned _hour;
unsigned _min;
};

time24::time24()
: _hour(0), _min(0)
{
}

time24::time24(unsigned hour, unsigned min)
: _hour(0), _min(0)
{
set(hour, min);
}

time24::~time24()
{
}

void time24::set(unsigned hour, unsigned min)
{
if( hour>23 || min>59 )
throw invalid_time();

_hour = hour;
_min = min;
}

void time24::add_min(unsigned min)
{
unsigned dh = (_min + min) / 60;

_hour = (_hour + dh) % 24;
_min = (_min + min) % 60;
}

unsigned time24::hour() const
{
return _hour;
}

unsigned time24::min() const
{
return _min;
}

time24 operator+(time24& t, unsigned min)
{
time24 ret(t);
ret.add_min(min);
return ret;
}

time24 operator+(unsigned min, time24& t)
{
return operator+(t, min);
}

bool operator==(time24 const& lhs, time24 const& rhs)
{
return lhs._hour == rhs._hour
&& lhs._min == rhs._min;
}

std::ostream& operator<<(std::ostream& os, time24 const& t)
{
os << "hour=" << t.hour() << ", min=" << t.min() << endl;;
return os;
}

std::istream& operator>>(std::istream& is, time24 &t)
{
cout << "input hour, min:";
is>>t._hour>>t._min;
return is;
}

int main()
{
time24 t1,t2;

cout<<"使用重载输入函数设置t1:"< cin>>t1;

cout< cout<<"hour="< cout<
cout< int h,m;
cout<<"请给t2输入小时和分钟:";
cin>>h>>m;
t2.set(h,m);

cout< cout<
cout< t1=t1+30;
cout<<"运算完成后,t1:"<
cout< if(t1==t2)
{
cout<<"t1等价于t2"< }
else
{
cout<<"t1不等价于t2"< }

cin.get();
cin.get();
return 0;
}