如何将用户定义的类型转换为基本类型?

时间:2010-09-30 17:59:00

标签: c++

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

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

但是,我无法实现i复制ctor in double,它将收到一个Complex。

我该怎么做?我知道有一种运算符重载的方法,但我找不到如何。
最终我想要这行将编译:
Complex c;
(double)c;

谢谢!

6 个答案:

答案 0 :(得分:11)

在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;
}

答案 1 :(得分:3)

这样做的正确方法是在班级中添加转化运算符。

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

并像这样使用:

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

答案 2 :(得分:3)

你的意思是你想要这样做

Complex c;
double d =  c; ?

您可以为此目的编写conversion operator

struct Complex{
   double double_val;

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

答案 3 :(得分:3)

Complex类的摩擦是复数是实数的超集,即所有实数都是复数,并非所有复数都是实数。

因此,正如其他人所指出的那样,你需要在Complex中为double定义一个类型转换操作符,真正的工作就是你放入该函数。最安全的事情是如果数字不真实则抛出异常:

#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;
    }
};

答案 4 :(得分:0)

operator double就是你需要的

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

答案 5 :(得分:0)

您可以创建自定义强制转换运算符: - http://msdn.microsoft.com/en-us/library/ts48df3y%28v=VS.100%29.aspx - Operator-Overloading / doublecastoperator.htm“&gt; http://www.java2s.com/Tutorial/Cpp/0200_Operator-Overloading/doublecastoperator.htm

所以你的代码看起来像这样(在你的Complex类中): operator double(){return / *无论你想对复数做什么* /}