我如何在一个类中创建一个运算符函数,用于将其他类型转换为该类的对象?
例如
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
。
关于C++ 类运算符自类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4717537/