0
点赞
收藏
分享

微信扫一扫

C++自定义类型转换

上节说到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<<(ostream& out, const Timer& t);

private:
	int hour_;
	int min_;
	int sec_;
};

现在有一个需求:如何将任意一个整数类型的变量赋值转化成时间的秒单位?

	//自定义转换函数,转换成秒
	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 << sec << endl;
	return 0;
}

C++自定义类型转换_自定义类型转换


举报

相关推荐

0 条评论