C++57个入门知识点_54 转换运算符(前缀/后缀++写法;new重载方法;转换运算符:将自定义的类转换为我们想要转换的类型)

本文介绍了C++中的转换运算符,包括前缀和后缀递增运算符、new运算符重载,以及如何通过operator int将自定义CInt类转换为int。通过实例演示了如何在类中定义这些运算符,以及它们在实际编程中的使用场景。
摘要由CSDN通过智能技术生成

接上篇C++57个入门知识点_53 运算符重载方式:类成员的运算符重载及友元全局的运算符重载(operator:算数±、关系运算==<>、逻辑&&||、条件(三元运算);实现运算符重载的两种方式),本篇介绍转换运算符。转换运算符不是很难,使用情况也不是很多,但是作为一个知识点需要进行讲解。

总结:

  1. 前缀++写法,++n有效
  2. 后缀++写法,n++有效
  3. new重载方法
  4. 转换运算符:将自定义的类转换为我们想要转换的类型

以下代码中的CInt 类代表了我们自己封装的一个Int

#include <iostream>

class CInt {
public:
	CInt(int n) {
		m_int = n;
	}
private:
	int m_int;
};

int main(int argc, char* argv[]){}

我们知道,一个数字n,我们可以对其进行n++或者++n,而对于上面的类是否可以进行类似的操作?

1. 前缀++写法,++n有效


对于上面代码,在 main中写代码如下:

int main(int argc, char* argv[])
{
	CInt objN(1);
	objN++;
}

编译结果如下:
在这里插入图片描述
这是因为没有在类中定义++运算符,在类中定义相应的成员运算符重载如下:

#include <iostream>

class CInt {
public:
	CInt(int n) {
		m_int = n;
	}

	//前缀++写法,++n有效
	CInt operator++() {
		return ++m_int;
	}
private:
	int m_int;
};

int main(int argc, char* argv[])
{
	CInt objN(1);
	objN++;
}

编译结果:显示未定义该运算符
在这里插入图片描述
但是将main函数中改为++objN;,可以正常编译。

因此我们知道以下写法是一种前缀++写法,++n有效

	CInt operator++() {
		return ++m_int;
	}

2. 后缀++写法,n++有效


对应编译器规定的 后缀++写法如下:

	//后缀++写法,n++有效
	CInt operator++(int) {
		return m_int++;
	}

整体代码如下:

#include <iostream>

class CInt {
public:
	CInt(int n) {
		m_int = n;
	}

	//后缀++写法,n++有效
	CInt operator++(int) {
		return m_int++;
	}

private:
	int m_int;
};

int main(int argc, char* argv[])
{
	CInt objN(1);
	objN++;
}

3. new重载方法


前面我们已经讲过 new也是一种运算符,通过以下方式对 new进行重载

#include <iostream>

class CInt {
public:
	CInt(int n) {
		m_int = n;
	}

	//new是一种运算符
	void* operator new(size_t cb)
	{
		return new char[cb];
	}

private:
	int m_int;
};

int main(int argc, char* argv[])
{
	CInt* p = new CInt(123);
}

4. 转换运算符


以下写法为转换运算符的写法,会将自定义的类转换为我们想要转换的类型

以下的写法将CInt类转换为int类型

	//转换运算符,运算符重载优先级更高于转换运算符
	operator int() {
		return m_int;
	}

从而在main中可以像下面代码中使用int的操作,而不需要重载+

#include <iostream>

class CInt {
public:
	CInt(int n) {
		m_int = n;
	}

	//转换运算符,运算符重载优先级更高于转换运算符
	operator int() {
		return m_int;
	}

private:
	int m_int;
};

int main(int argc, char* argv[])
{
	CInt objN(1);
	objN = objN + 1;//当+重载时,+没有定义,系统默认匹配到转换运算符位置进行转换
}

5.学习视频地址:C++57个入门知识点_54 转换运算符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十月旧城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值