繁体   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