C++中bool类型与算术运算符

C++中的算术运算符包括“+”、“-”、“*”、“/”和“%”等运算符。算术运算符都能作用于任意算数类型。对于bool类型来说,在使用算术运算符时需要格外注意。

1 整型与bool类型的二元算术运算

对于不同类型的数进行算术运算时,小类型的数会被提升成较大类型的数,所有运算对象最终会转换成同一类型。

int i = 1 + true;

此时,true会被提升为整型1,此时i的值是2。

2 bool类型与一元算术运算符

除了之前提到的二元算术运算符之外,还有“+”和“-”两个一元算术运算符,分别表示正号和负号。

bool b1 = true;
int i = 1 + (-b1);

此时(-b1)的值会被提升为整型-1,因此i的值是0。

bool b2 = -b1;

按照之前的分析,(-b1)的值会被提升为整型-1,而使用-1对bool类型的对象b2进行初始化,因为-1不等于0,所以,此时b2的值true。

下面是一个示例代码: ```c++ #include <iostream> #include <iomanip> using namespace std; class CTime { private: int hour; int minute; int second; public: CTime(int h = 0, int m = 0, int s = 0); ~CTime(); void SetTime(int h, int m, int s); string GetTime(); void ShowTime(); bool operator==(const CTime& t); bool operator>(const CTime& t); CTime& operator++(); // 前置++ CTime operator++(int); // 后置++ CTime& operator+=(int s); }; CTime::CTime(int h, int m, int s) { hour = h; minute = m; second = s; } CTime::~CTime() {} void CTime::SetTime(int h, int m, int s) { hour = h; minute = m; second = s; } string CTime::GetTime() { stringstream ss; ss << setfill('0') << setw(2) << hour << ":" << setw(2) << minute << ":" << setw(2) << second; return ss.str(); } void CTime::ShowTime() { cout << GetTime() << endl; } bool CTime::operator==(const CTime& t) { return hour == t.hour && minute == t.minute && second == t.second; } bool CTime::operator>(const CTime& t) { return hour > t.hour || (hour == t.hour && minute > t.minute) || (hour == t.hour && minute == t.minute && second > t.second); } CTime& CTime::operator++() { second++; if (second >= 60) { second = 0; minute++; if (minute >= 60) { minute = 0; hour++; if (hour >= 24) { hour = 0; } } } return *this; } CTime CTime::operator++(int) { CTime temp(*this); operator++(); return temp; } CTime& CTime::operator+=(int s) { int h = s / 3600; int m = (s % 3600) / 60; int ss = s % 60; hour += h; minute += m; second += ss; if (second >= 60) { second -= 60; minute++; } if (minute >= 60) { minute -= 60; hour++; } if (hour >= 24) { hour -= 24; } return *this; } int main() { CTime t1(8, 30, 0); CTime t2(20, 0, 0); t1.ShowTime(); // 输出 08:30:00 t2.ShowTime(); // 输出 20:00:00 cout << (t1 == t2) << endl; // 输出 0 cout << (t1 > t2) << endl; // 输出 0 cout << (t2 > t1) << endl; // 输出 1 ++t1; t1.ShowTime(); // 输出 08:30:01 CTime t3 = t2++; t2.ShowTime(); // 输出 20:00:01 t3.ShowTime(); // 输出 20:00:00 t1 += 3600; // 增加1小时 t1.ShowTime(); // 输出 09:30:01 return 0; } ``` 在这个示例,CTime类代表一个时间,包含小时、分钟和秒。构造函数用于初始化时间,析构函数目前没有实现任何操作。SetTime函数用于修改时间。GetTime函数返回一个表示时间的字符串,ShowTime函数用于将时间打印到控制台窗口。 重载运算符函数包括关系运算符(==和>)和算术运算符(前置++、后置++、+=)。关系运算符的返回值类型bool型,算术运算符和赋值运算符返回值为引用类型,以支持链式表达式。在main函数,我们可以创建CTime对象并使用这些运算符进行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值