1. 程式人生 > >C++ 類型別隱式轉換

C++ 類型別隱式轉換

隱式類型別轉換:“可以用單個實參來呼叫的建構函式定義了從形參型別到該型別的一個隱式轉換。”(C++ Primer)首先要單個實參,你可以把建構函式colour的預設實參去掉,也就是定義一個物件必須要兩個引數的時候,檔案編譯不能通過。

(以上只是將內建型別轉換為自定義型別)

過載double,int 將使用者自定義資料型別轉換為內建型別

當建構函式只有一個引數,而且該引數又不是本類的const和引用時,這種函式叫做轉換建構函式

#include<iostream>
using namespace std;
class Complex
{
public:
	Complex() :real(0), imag(0)
	{

	}
	Complex(double r, double i) :real(r), imag(i)
	{

	}
	//當建構函式只有一個引數,而且該引數又不是本類的const和引用時,這種函式叫做轉換建構函式
	Complex(double r) :real(r), imag(0)
	{

	}
	void Print()
	{
		cout << "real=" << real << "image=" << imag << endl;
	}
	Complex &operator+(Complex c)
	{
		return Complex(this->real + c.real, this->imag+ c.imag);
		
	}
private:
	double real;
	double imag;
};

int main()
{
	Complex c;
	c = 1.2;//1.2呼叫轉換建構函式,1.2將賦值給real
	c.Print();
	Complex c1(2.9, 4.2);
	Complex c2 = c1 + 3.1;//呼叫轉換建構函式將3.1轉換為Complex型別
	c2.Print();
	system("pause");

	return 0;


}


過載double int,實現類型別轉換

#include<iostream>
class fushu
{
public:
	fushu(int num)
	{
		x = num;
		y = num;
	}
	void print()//輸出
	{
		std::cout << x << "+" << y << "i" << std::endl;

	}
	operator int();
	//不支援友元,僅僅支援成員函式
	operator double()
	{
		return double(x + y);
	}


private:
	int x;
	int y;
};
fushu::operator int()  //類類之間的轉換函式
{
	return x*y;
}
void main()
{

	int num(100.9);
	fushu fushu1(num);//建構函式
	fushu1.print();
	
	int data = (int)fushu1 + 10;//型別轉換可以把一個自定義型別當做基本資料型別來計算
	std::cout << data << std::endl;
	int data(fushu1);//轉換
	data = fushu1;

	std::cin.get();
	int  num1(10.8);
	fushu fushu1 = (fushu)10.8;
	fushu fushu1 = static_cast<fushu>(10.8);

	

}

如要要阻止隱式型別轉換的話,C++提供了一種抑制建構函式隱式轉換的辦法,就是在建構函式前面加explicit關鍵字

相關推薦

C++ 型別轉換

隱式類型別轉換:“可以用單個實參來呼叫的建構函式定義了從形參型別到該型別的一個隱式轉換。”(C++ Primer)首先要單個實參,你可以把建構函式colour的預設實參去掉,也就是定義一個物件必須要兩

C++ 轉換與explicit

我們都知道C/C++中的基本資料型別可以發生轉換,類也一樣可以。類的轉換可以分為兩種型別: 1. 類的定義與基本資料型別相關,基本資料型別與類相互轉換 2. 類的定義與其他類相關,類與類之間相互轉換 第二種稍微複雜一點,本文只討論第一種。 cl

c++轉換與強制轉換過載詳解

在寫這篇文章之前,讓我們先回顧一下編譯器通過匹配過程確定呼叫哪一個函式的匹配順序:(1)尋找和使用最符合函式名和引數型別(包括返回值)的函式,若找到則呼叫; (2)否則,尋找一個函式模板,將其例項化產生一個匹配的過載函式,若找到則呼叫; (3)否則,尋找可以通過型別轉換進行引數匹配的過載函式,若找到則呼叫

2017-9-15第一次學習C#內容(轉換,語句,輸入輸出,格式字符串,示例)

程序設計 null 組合 賦值 win bre left 格式 空間 類型轉換 1).隱式轉換 註意: 隱式轉換中不存在向char類型的隱式轉換,float和double類型也不能隱式轉換為decimal型. 2)強制類型轉換 (目標類型) (表達式) 3)其他方式

JavaScript複習之--javascript資料型別轉換

JavaScript資料型別隱式轉換。 一,函式類     isNaN()     該函式會對引數進行隱式的Number()轉換,如果轉換不成功則返回true。     alert()     輸出的內容隱式的轉換為字串。 二,運算子類。     1,算術運算子。     

C#顯示與轉換操作符

C#類中顯示與隱匿轉換操作符同時只能實現一個 // 顯示轉換操作符 static public explicit operator Salary(int n) { Salary s = new Salary(n); return s; }

c++14、轉換

C++有關的基礎前十三篇,雖然粗減,單頁已經大致介紹了一遍。在介紹檔案操作和stl之前,我們簡單地介紹一下另外一個關注點,隱式型別轉換,簡稱隱式轉換。 程式如下: 同時我們可知,每一次類的大小都是8

C#程式設計基礎第十課:C#中的常用資料型別轉換轉換、顯轉換、Convert轉換

知識點:型別轉換、數值型別間的轉換、隱式型別轉換、顯式型別轉換、數值型別和string型別的轉換、Convert類轉換。 1、資料型別型別轉換 理解:從根本上說是型別鑄造,或者說是把資料從一種型別轉換為另一種型別。C#有多種資料型別,在使用各種型別的資料時,有時候需要將一種型別的資料轉換

21.C++- ++操作符重載、轉換之explicit關鍵字、轉換函數

inf 我們 bug 操作符 臨時對象 blog 返回值 cnblogs 文章 ++操作符重載 ++操作符分為前置++和後置++,比如: ++a; a++; ++操作符可以進行全局函數或成員函數重載 重載前置++操作符不需要參數 重載後置++操作符需要一個int類型的占

C++進階--型別轉換

//############################################################################ /* 隱式型別轉換 * * 型別轉換可分為: * 隱式

C#父強制轉換成子,子轉換成父

即Person p = new Student();  這種情況下可以把P物件強制轉換。你可能會問  這樣就是建立的一個student物件 我幹嘛不用student去建立? 這時候就是面向物件的程式設計的理解了。比如:我的一個方法的引數需要傳入一個學生,那麼你只能傳入一個student ,可是如果我的引數可

C++型別轉換和顯轉換

隱式轉換:編譯器根據需要自動轉換變數型別。 1、一些基本型別的轉換 double d = 82.0; int i = d; 2、類的隱式轉換,以下幾種情況,類B能隱式轉換成類A: (1)B公有繼承A,然後用子類去初始化基類 class B: class A{} A a;

cpp——轉換——型別

概述 #pragma pack(4) class CAnimal { public: char name[3]; short age; int color; char

關於C語言的型別轉換

這個問題,本來以為自己早已爛熟於胸了,但是一個測試程式還是把我給放倒了。 首先給出以下C語言預設的隱式轉換規則: char,short --> int --> unsigned --> long --> double <-- float OK

c語言的(自動)資料型別轉換

一.算術運算子中的轉換規則: double ←── float 高↑long↑unsigned↑int ←── char,short 低 注意:圖中橫向箭頭表示必須的轉換,如兩個float型數參加運算,雖然它們型別相同,但仍要先轉成double型再進行運算,結果亦為doub

C語言數據型的轉換轉換

箭頭 long 一起 系統 結果 註意 數據轉換 表示 轉換 算術運算符中的轉換規則:double ←── float 高↑long↑unsigned↑int ←── char,short 低註意:   圖中橫向箭頭表示必

轉換轉換 自動提升 強制轉換

最大 直接 歸納 隱式轉換 微軟雅黑 mil 邊界 操作 行數 基本數據類型的類型轉換Java中基本數據類型共有8種,分別是:布爾型boolean,字符型char和數值型byte/short/int/long/float/double。由於字符型char所表示的單個字符與A

無法確定條件表達型,因為Datetime和<null>之間沒有轉換

條件表達式 lte 無法 err ror 表達 隱式轉換 end bsp Q:   var a=isFilter ? ta.EndDate : null;   Error:無法確定條件表達式的類型,因為Datetime和<null>之間沒有隱式轉換     ta

scala中轉換

des object 同名 生成 ase end app scala getname /** * Created by root * Description :隱式類: * 1.其所帶的構造參數有且只能有一個;並且構造器的參數是轉換之前的對象 * 2.隱式

scala中轉換轉換調用中本不存在的方法

esc rip args root imp 轉換 存在 val 轉換成 /** * Created by root * Description : 隱式轉換調用類中本不存在的方法 */ class Person(name : String){ def g