[英]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.