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