Anonymous
Anonymous asked in 電腦與網際網路程式設計 · 2 decades ago

c++語法的問題

再書本上看到一段程式碼

我將它簡化以後大致是這樣

class A

{

public:

int m_hdc ;

inline operator HDC(){ return m_hdc ;};

};

請問倒數第二行是定義運算子嗎?

還有inline在這邊是必要的嗎?

能詳細說明那行的程式碼的用途嗎

還是有點搞不懂 謝謝

2 Answers

Rating
  • 2 decades ago
    Favorite Answer

    inline operator HDC() { return m_hdc; };

    這行是完全正確的 C++ 函數宣告, 其用途是宣告一個型別轉換運算子 (conversion operator), 用來將 class A 轉換成 HDC。

    當你在程式中這樣用時, 就會使用這個函式:

    A a;

    HDC hDC;

    hDC = a; // 編譯器自動產生呼叫 operator HDC() 的型別轉換

    SelectObject (a, GetStockObject (BLACK_BRUSH)); // 這個也會

    這種型別轉換運算子, 可以用來將 class A 轉換成內建型別, 如 operator int(), 也可以轉換成使用者自訂型別, 如 operator HDC(), 換句話說, 就是在程式中你可以把 class A 這種型別的變數當作 HDC 用。

    宣告型別轉換運算子的函數時, 都「不能」有傳回值的型別, 因為型別轉換運算子的傳回值, 必定是所要轉換的目標型別, 如 operator int() 的傳回值必定是 int。

    inline 並不是必要的, 但一般習慣上為了加快型別轉換函式的效率, 通常都會宣告成 inline, 來節省函式呼叫的成本。

    以問題中的例子來說, 如果 HDC 這個型別的大小 (在 Windows 中, HDC 好像是個指標) 和 int 一樣的話, 呼叫這個函數幾乎不會產生任何程式碼。

    但這個範例這樣寫, 是作者自己假設了 HDC 是以 int 方式實作, 這是相容性很差的寫法, 比較好的寫法應該是:

    class A

    {

    public:

    HDC m_hDC;

    inline operator HDC() { return m_hDC; }

    }

    • Login to reply the answers
  • Anonymous
    2 decades ago

    耶 ?

    真的有conversion function

    原來是我還沒讀到說

    thx ~~

    • Login to reply the answers
Still have questions? Get your answers by asking now.