型別轉換運算子

Beasts777發表於2024-08-01

1. 作用

類透過自定義的型別轉換運算子,可以將一個型別轉換成另一個型別。例如將自定義的Student類轉換成std::string類。

雖然在格式上和運算子過載類似,但運算子過載是一個成員函式,而型別轉換運算子不是,因為沒有返回值。

2. 格式

operator type() [const];
  • type:表示轉化後的資料型別。例如intstd::string
  • cosnt:可有可無,加了表示禁止在該函式內修改類成員變數。

3. 例項

  • 實現:

    class Student {
    private:
        int m_id;
    public:
        Student();
        Student(int id);
        // 型別轉換運算子
        operator std::string();
    };
    
    Student::Student(int id): m_id(id){}
    
    Student::operator std::string(){
        return std::to_string(this->m_id);
    }
    
  • 測試:

    int main(int argc, char *argv[]){
        Student s = 123;
        std::string str = s;
        std::cout << str << std::endl;
        return 0;
    }
    
  • 輸出:

    123
    

型別轉換成功

4. 注意事項

  • 不允許轉換成陣列或者函式型別,但允許轉換為指標(包括陣列指標以及函式指標)或者引用型別
  • 型別轉換運算子沒有顯式的返回型別,也沒有形參
  • 必須定義成類的成員函式
  • 型別轉換函式通常應該為const型別,不是const型別也行。
  • 並且轉換的型別要與return結果型別相同
  • 類型別轉換函式不能呼叫。而是透過=直接使用。

相關文章