簡體   English   中英

C ++類運算符自類型轉換

[英]c++ class operator self-typecast

我如何在一個類中創建一個運算符函數,該函數用於類型轉換其他類型作為該類的對象?

例如

class MyClass
{
  // ...
    // operator ??
  // ...
}

int main()
{
  MyClass obj;
  int Somevar;
  obj=(MyClass)Somevar; // class typecast
}

通常,是否有運算符可以使用確切的語法允許這種類型轉換?

只需添加一個帶有一個參數的構造函數即可:

class MyClass {
    explicit MyClass(int x) { … }
};

稱為:

MyClass x = static_cast<MyClass>(10); // or
MyClass y = MyClass(10); // or even
MyClass z(10);

這允許像您的示例中那樣進行顯式轉換 (還支持C樣式強制轉換語法,但在此不再顯示,因為您永遠不要使用C樣式強制轉換。它們是邪惡的和不必要的。)

有時(但很少 ),隱式轉換是比較合適的(例如,從轉換char*std::string的作業)。 在這種情況下,請刪除構造函數前面的explicit限定符:

class MyClass {
   MyClass(int x) { … }
};

現在可以從int進行隱式轉換:

MyClass a = 10;

但是,這通常不是一個好主意,因為隱式轉換是非直觀且容易出錯的,因此通常應將構造方法標記為explicit

定義一個帶有int參數的構造函數。

但是隱式轉換存在一些問題,以至於該語言使用explicit關鍵字來禁止它們。

主要是關於過載解析。

因此,在允許隱式轉換之前,也許三思而后行。

干杯,……

為非顯式構造函數提供所需類型的參數:

class MyClass {
public:
    MyClass( int x );
...
};

MyClass a = 42;

請注意 :這通常是個壞主意。

您需要隱式構造對象。

class MyClass
{
int x;
public:
  MyClass(int X = 0):x(X){}  //also serves a default constructor
}

int main()
{
  MyClass obj = Somevar; // implicit type construction
}

為什么不使用operator =()?

class MyClass
{
public:
  Myclass& operator=()(int i) {
  //do what you want
  return *this;
  }
}

int main()
{
  MyClass obj;
  int Somevar;
  obj = Somevar; // call operator=(somevar)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM