c++学习 之 强制类型转换

前言

  • 单参数的构造函数具有类型转换作用
  • 强制类型转换函数

正文

单参数的构造函数具有类型转换作用

看代码

#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
class A
{
public:
	A(int a)
	{
		this->p = a;
	}
	A operator+(const A& p)
	{
		A pp(this->p + p.p);
		return pp;;
	}
	int p;
};

int main()
{
	A a1(2);
	A a2 = a1 + 1;
	cout << a2.p << endl;
	cout << a1.p << endl;
}

看看这行代码

A a2 = a1 + 1;

我们运算符重载 A operator+(const A& p) 中除了隐藏的 this参数,另外一个参数 是 类 A 类型的 ,上面的代码明显有错误,为什么不报错呢,这是因为单参数的构造函数具有类型转换的功能,编译器将 a1 + 1 转换成了 a1 + A( 1 ) ,然后再调用 operator+ 函数进行运算,最后再调用拷贝构造函数实现 a2 的初始化。

强制类型转换函数

格式

operator 类型表达式 ( )

由于转换后的类型就是函数的返回类型,所以强制类型转换函数不需要定义返回类型,也不带输入参数(表示将 this 对象转换位其他类型 )
且强制类型转换的结果通常为右值

我们来看看下面这个代码

#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
class A
{
public:
	A(int a)
	{
		this->p = a;
	}
	/*A operator+(const A& p)
	{
		A pp(this->p + p.p);
		return pp;;
	}*/
	 operator int()
	{
		return p;
	}
	int p;
};

int main()
{
	A a1(2);
	A a2 = a1 + 1;
	cout << a2.p << endl;
	cout << a1.p << endl;
}

如果把注释的部分去掉,代码会报错,因为程序不知道是调用我们之前讲的那个函数,还是 将 a1 转换成 int ( 即 p 的值 ),再调用构造函数
或者改成

 A a2 =  1 + a1;

这样即使有A operator+(const A& p)函数也不会被调用

你可能感兴趣的:(c++,c++,学习,java)