C 中使用者定義的轉換

2021-04-09 08:51:44 字數 2309 閱讀 4751

看到《深度探索

c++物件模型》的第

21頁,在其談到

c struct

在c++

中的乙個合理用途時,看到了

c++中使用者定義的轉換的運用。因而回頭將《

c++ primer

》中關於使用者定義的轉換的一些細節溫習了一下。

(1)

使用者定義的轉換的必要性:

我們希望能夠在

**allint

物件和其他

**allint

物件或者內建算術型別的物件之間進行加減操作,我們要通過提供6個

**allint

操作符函式來實現對這些操作的支援:

class

**allint 

...operator+( 

const

**allint &);

operator-( 

const

**allint &);

//...

private

:int

value;

} ;

兩個成員操作符允許我們加減兩個

**allint

物件。友元全域性操作符允許我們在

**allint

物件和內建算術型別的物件之間進行加減操作。之所以只需要

6個操作符,是因為任何內建算術型別都可以被轉換為與

int型引數相匹配。

如果我們還想支援按位操作符、邏輯操作符、關係操作符和復合賦值操作符,則要求的操作符的數目就變得非常可怕了。我們更希望的,不是提供所有的過載操作符,而是一種將

**allint

類物件自動轉換成

int

型物件的方式。

c++

提供了一種機制,通過它,每個類都可以定義一組「可被應用在該型別物件上的轉換」。對於

**allint

,我們定義了乙個從

**allint

物件到int

型的轉換。

class

**allint 

...//

轉換操作符

//**allint ==> int

operator

int() 

...//

沒有提供過載操作符

private

:int

value;

} ;

(2)

需要注意的地方:

(a)

轉換函式必須是成員函式,它的宣告不能指定返回型別和參數列。

operator

int( **allint 

&); 

//錯誤: 不是成員

class

**allint 

... ;

(b)

顯式的型別轉換會導致呼叫轉換函式。(須注意在必要的時候將轉換型別設定為

const

,只允許對被轉換的類物件進行唯讀訪問)

#include 

"token.h

"token tok( 

"function", 

78);

//函式型的表示法: 呼叫 token::operator **allint()

**allint tokval 

=**allint( tok );

//static_cast: 呼叫 token::operator tname()

char

*tokname 

=static_cast

<

char

*>

( tok );

(c)

如果轉換的目標(本例中的

double

)與轉換函式的型別(本例中的

int型別)不完全匹配,但目標型別可以通過標準轉換序列到達,則仍可呼叫轉換函式。

extern

void

calc( 

double

);token tok( 

"constant", 

44);

//呼叫 tok.operator int() 嗎? 是的

//int --> double 通過標準轉換

calc( tok );

(d)

使用建構函式作為轉換函式。

extern

void

func( number );

**allint si( 

87);

...

當然,可通過在類的建構函式前設定

explicit

,以禁止將其用來執行隱式轉換。

C 使用者定義型別轉換

c 使用者定義型別轉換 c 提供隱式轉換和顯式轉換 宣告隱式轉換的語法如下.注 所有使用者定義轉換必須使用public和static修飾符 public static implicit operator targettype sourcetype identifier targettype 目標型別...

遊戲中使用者資料定義

如有欠缺後續補充 分類資料指標資料定義統計粒度統計型別單位備註 新使用者註冊使用者 統計日首次登陸遊戲的使用者數日產品 賬號新增角色數 統計日建立的角色數量 日產品 伺服器 角色包含同賬號建立的多個角色 n日留存 率 註冊使用者在後續n天內繼續登入遊戲的使用者。如11月1日註冊使用者的3日留存 11...

CSS 中使用者自定義字型 font face

font face 允許網頁中使用自定義的字型,這些自定義的字型被放置在伺服器上,從而讓網頁擺脫對訪問者計算機上字型環境的依賴。簡單的說,有了 font face,只需將字型上傳到伺服器端,無論訪問者計算機上是否安裝該字型,網頁都能夠正確的顯示。font face 的語法規則如下,font face...