c++学习笔记(9)类的类型转换


#include "stdafx.h"
#include "iostream"
using namespace std;
class Stonewt
{
private:
	enum{Lbs_per_stn = 14};  //等效static const int Lbs_per_stn = 14;
	double stone;
	double pounds;
public:
	Stonewt();
	explicit Stonewt(double lbs);  //explicit关闭这种自动类型转换的特性
	~Stonewt();
	operator int()const;
	operator double()const; //转换函数


};


Stonewt::Stonewt(){ };


Stonewt::Stonewt(double lbs)
{
	stone = lbs;
	pounds = lbs / 2;
}


Stonewt::~Stonewt()
{
	
}


//转换函数定义:
Stonewt::operator int()const
{
	return int (pounds + 0.5);
}


Stonewt::operator double()const
{
	return pounds;
}


int main()
{
	Stonewt myCat1;  
	myCat1 = (Stonewt)19.6;  //自动类型装换由于Stonewt(double lbs),而有了explicit,将关闭自动转换


	//但是可以显示的转换
	Stonewt myCat;  
	myCat = Stonewt(19.6);
	double eg = myCat;
	cout << eg << endl;
	//myCat = (Stonewt)19.6;
	cout << int(myCat) << endl;


	cin.get();
	cin.get();
	return 0;
}


不带explicit的为自动的类型转化,加上explicit之后就变成了不能隐式的进行转化,只能够显示的进行,

并且还可以设置类型转化函数,以实现转化。

最后的 cout << eg << endl; 利用了转换函数进行的转换,并非隐式转换,利用转换函数进行的,

如果为long gone = myCat; 将出现二义性,会出错的。



你可能感兴趣的:(C++,include)