[英]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
是复数是实数的超集,即虽然所有实数也是复数,但并非所有复数都是实数。
因此,正如其他人指出的那样,您需要在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;
}
};
您需要运算符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.