繁体   English   中英

如何将用户定义的类型转换为原始类型?

[英]How to convert a user defined type to primitive type?

假设我们有一个名为Complex的类,它表示一个复数。 我想将此对象转换为double对象。

我可以通过在Complex中实现复制ctor来实现的另一种方法:
Complex(const double &d);

但是,我不能实现双重复制ctor,这将收到一个Complex。

我该怎么做呢? 我知道有一种方法可以重载运算符,但我找不到方法。
最终我希望这行能编译:
Complex c;
(double)c;

谢谢!!

在您的Complex类上实现一个转换运算符:

class Complex
{
 // ...
  operator double() const
  { 
    double ret = // magic happens here
    return ret;
  }
};

如果您出于某种原因不想为此而烦恼,则可以提供全局转换功能:

double convert_to_double(const Complex& rhs)
{ 
  double ret = // magic happens
  return ret;
}

正确的方法是在类中添加一个转换运算符。

class myclass {    
public:    
    operator double() const
    {
        return _mydouble;
    }
...
};

并像这样使用:

myclass c;
double d = c; // invokes operator double

你的意思是你想这样做

Complex c;
double d =  c; ?

您可以为此编写转换运算符

struct Complex{
   double double_val;

   operator double() const {
       return double_val;
   }
};

Complex类的Complex是复数是实数的超集,即虽然所有实数也是复数,但并非所有复数都是实数。

因此,正如其他人指出的那样,您需要在Complexdouble定义一个类型转换运算符,真正的工作是您在该函数中所做的工作。 最安全的事情是,如果数字不是实数,则抛出异常:

#include <exception>

struct Complex
{
    double real;
    double imag;

    Complex(double real_, double imag_ = 0.0): real(real_), imag(imag_) {)

    // ...

    class not_real: public exception
    {
        virtual const char* what() const throw()
        {
            return "cannot cast non-real complex number to double";
        }
    };

    operator double() const {
        if(imag != 0.0)
            throw not_real();
        return real;
    }
};

您需要运算符double

class Complex
{
   operator double() const {....}
}

您可以创建自定义强制转换运算符:-http: //msdn.microsoft.com/zh-cn/library/ts48df3y%28v=VS.100%29.aspx-Operator-Overloading / doublecastoperator.htm“> http:// www.java2s.com/教程/Cpp/0200_Operator-Overloading/doublecastoperator.htm

因此,您的代码将看起来像这样(在Complex类中):operator double(){返回/ *对复杂对象* /的任何操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM