1. 程式人生 > >C++學習總結(十 五)——類的型別裝換方法

C++學習總結(十 五)——類的型別裝換方法

類與類間的資料型別轉換方法有兩種

一.通過類的建構函式進行類與類間的資料型別裝換

二.使用轉換函式進行資料型別的裝換。X::operator T(){return T;}

將X型別的物件裝換為T型別的物件,裝換函式沒有引數,沒有返回型別,但是必須用return 返回T型別物件,且該函式只能成為成員函式,不能為友元。

#include<iostream>
class complex
{
public:
	explicit complex(int num)//避免隱式轉換
	{
		x = y = num;
	}
	 operator int()	//不支援友元函式,只支援成員函式。
	{
		return x + y;
	}
	void print()
	{
		std::cout << x << '+' << y << 'i' << std::endl;
	}
private:	
	int x;
	int y;
};
void main1()
{
	complex complex1(10);
	complex1.print();
	int num = complex1;
	std::cin.get();
}

 //類與類間的資料型別轉換
class mianji
{
public:
	friend class zuobiao;
	mianji()
	{
		this->cx = 0;
		this->cy = 0;
	}
	//~mianji();

private:
	int cx;
	int cy;

};
class zuobiao
{
public:
	//friend class mianji;//定義友元類,允許友元訪問私有變數
	friend std::ostream &operator <<(std::ostream &out, zuobiao &zuobiao1)
	{
		out << zuobiao1.x;
		out << zuobiao1.y;
		return out;
	}
	zuobiao(mianji mianji1)
	{
		this->x = mianji1.cx;
		this->y = mianji1.cy;
	}
	//~zuobiao();
	operator mianji()
	{
		mianji mianji1;
		this->x = mianji1.cx;
		this->y = mianji1.cy;
		return mianji1;
	}
private:
	int x;
	int y;
};
int main()
{
	mianji mianji1;
	zuobiao zuobiao1 = static_cast<zuobiao>(mianji1);
	zuobiao zuobiao2(mianji1);//使用建構函式進行型別轉換
	zuobiao2 = mianji1;//使用成員函式,轉換函式進行型別初始化

	std::cout << zuobiao1;
	std::cout << zuobiao2;

	std::cin.get();		  
}