怎樣過載強制型別轉換操作符

2021-06-04 11:38:51 字數 765 閱讀 5949

private:

double m_data;

};這是乙個非常簡單的例子,不過它已經足以描述我要說明的問題。假如,我們有如下的乙個函式:

print(int n)

當我們如下來使用mydouble的時候:

mydouble dbl(234.33);

print(dbl); // 注意此處正隱式呼叫了operator int()函式

我們所定義的int型強制型別轉換就會被呼叫。

我們看到,強制型別轉換的操作符過載,很不符合我們的習慣。通常,函式都是需要定義乙個返回型別的,不過,對於強制型別轉換的操作符過載函式來說,因為我們已經知道它所需要獲得的型別,從而就不再追加這樣的乙個累贅,而是將函式名與返回型別合併,給出乙個簡潔的形式。

強制型別轉換,在函式呼叫的時候經常會被用到,而用的最為頻繁的,估計會是cstring類中的lpctstr強制型別轉換。這個函式返回的是字串的指標,從而可以使很多需要提供字串的函式,可以直接傳入cstring的物件,比如下面的例子:

char sz1vname[64] = ;

cstring str("tian");

strcpy(sz1vname, str); // 其實,此時呼叫了強制型別轉換,將str轉換成乙個const char*的指標

顯然,強制型別轉換所帶來的好處是不言而喻的,並且,實現它們也並不那麼困難,那麼我這裡有乙個思考題:為什麼printf函式可以向下面那樣使用呢?它使用了強制型別轉換了嗎?

printf("my name is %s\n", str);

強制型別轉換操作符

操作符 中文名稱 含義 dynamic cast 動態型別轉換符 支援多型而存在,主要用於類之間的轉換 static cast 靜態型別轉換符 僅僅完成編譯時期的轉換檢查 reinterpret cast 再解釋型別轉換符 完成不同型別指標之間的相互轉換 const cast 常型別轉換符 用來修改...

C 過載型別轉換操作符

在需要做資料型別轉換時,一般顯式的寫法是 cpp view plain copy font size 18px type1 i type2 d i type1 d 顯式的寫型別轉,把d從type2型別轉為type1型別 這種寫法不能做到無縫轉換,也就是直接寫 i d,而不需要顯式的寫 type1 來...

C 強制型別轉換操作符 dynamic cast

原文 主題c dynamic cast是四個強制型別轉換操作符中最特殊的乙個,它支援執行時識別指標或引用。編譯器的rtti設定 dynamic cast提供rtti run time type information 也就是執行時型別識別。它對編譯器有要求,需要編譯器啟動 執行時型別資訊 這一選項。...