上节说到C++提供的四种强制转换函数reinterpret_cast,const_cast,static_cast,dynamic_cast ,在特定的场景下非要使用的话才用,因为都不安全,操作不当会造成额外的麻烦
那么这一节 我们讲一讲怎么样安全的将类型转换
答案其实很简单,就是C++里面的运算符重载。
在C++这种强大的OOP语言中给予了程序员们很大的自主能动性,比如,如果你绝对C++库中的功能不安全,不强大,完全可以自己去实现安全,强大的功能。
比如STL容器库中的容器非线程安全,那就自己再封装一个线程安全的类嘛
同样的道理,C++提供的类型强制转换函数不安全,那就自己去封装运算符重载就行了。
代码示例:
//假设有一个时间的类
class Timer
{
public:
Timer() {
hour_ = 0;
min_ = 0;
sec_ = 0;
}
~Timer() {}
void addTimer(int sec = 1) {
this->min_ += (this->sec_ + sec) / 60;
this->sec_ = (this->sec_ + sec) % 60;
}
void show() {
printf("% 2d; % 2d;%2d n", hour_, min_, sec_);
}
Timer operator+(Timer sec) {
Timer tem;
tem.sec_ = this->sec_ + sec_;
return tem;
}
Timer operator+(Timer &x) {
Timer tem;
tem.sec_ = this->sec_ + x.sec_;
tem.min_ = min_ + x.min_;
tem.hour_ = 服务器托管网hour_ + x.hour_;
return tem;
}
Timer operator++(int) {
Timer tem = *this;
sec_++;
return tem;
}
Timer operator++() {
sec_++;
return *this;
}
bool operator==(Timer& x) {
if (sec_ == x.sec_ &&服务器托管网; min_ == x.min_ && hour_ == x.hour_)
return true;
return false;
}
int& operator[](int i) {
switch (i)
{
case 0:
return hour_;
case 1:
return min_;
case 2:
return sec_;
}
}
friend ostream& operator
现在有一个需求:如何将任意一个整数类型的变量赋值转化成时间的秒单位?
//自定义转换函数,转换成秒
operator int() {
return sec_ + min_ * 60 + hour_ * 60 * 60;
}
使用operator ()小括号运算符重载即可完成。
main函数测试:
int main()
{
Timer t;
t.addTimer(3);
//假设需要这样的转换 :int sec = t; 整形sec数据转换成Timer对象t
int sec = t;
cout
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
欢迎来到第 62 期的【视野修炼 – 技术周刊】,下面是本期的精选内容简介 强烈推荐 Vite5.0 发布! Bubble – README 小组件 EmojiGen – AI emoji生成 开源工具&技术资讯 自适应文本框的 CSS 实现 悬赏1w…