C++类型转换函数

Posted 盗梦空间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++类型转换函数相关的知识,希望对你有一定的参考价值。

1.什么是类型转换函数

类型转换函数的作用是将一个类的对象转换成另一类型的数据。

class testclass
{
private:
	int r;
	int m;
	
public :
	testclass(int n,int f):r(1)
	{
		m=n+f;
	}
	~testclass()
	{
		printf("析构\n");
	}
	operator int()
	{
		return m;
	}
	//operator double()
	//{
	//	return (double)m;
	//}
};

比如上述的类

如果调用cout输出testclass对象,则编译器会调用operator int()。

testclass A(1,3);
cout<<A<<endl;

输出结果为4(编译器VS2010,系统环境WIN7 X64)

2.是不是所有调用都会自动调用类型转换函数?

上述第一项,已经证明cout调用可以。

那么来看printf。

代码:printf("%d",A);

输出为1(编译器VS2010,系统环境WIN7 X64)

事实证明printf是不可以的。

所以并不是所有的调用形式都会调用类型转换函数。

int n=A+1;这种运算的调用是可以的。

3.最好不要同时存在两个或两个以上的类型转换函数

容易造成语法上的歧义

我将上述的operator double()的注释打开

cout输出A的值,编译不过。错误提示为不明确的<<

而且

int n=A+1;
double d = A+1.0;

这种形式的调用也不能通过编译

需要强制转换

int n=(int)A+1;
double d = (double)A+1.0;

囧.......

以上是关于C++类型转换函数的主要内容,如果未能解决你的问题,请参考以下文章

C++中函数模板和模板函数的区别

C++ 错误:'(' 标记之前的预期构造函数、析构函数或类型转换

c++转换构造函数和类型转换函数

c++ 错误:预期构造函数、析构函数或在“(”标记之前的类型转换

C++中的类型转换函数

C++类型转换函数