C++ 重载类型转换运算符
重载了typecast运算符int,但在编译和运行代码后,我得到了分段错误 我调试了我的程序,看到使用typecast的代码行在每次调用typecast函数本身时都会无休止地重复。有人能解释一下周围发生了什么吗C++ 重载类型转换运算符,c++,c++11,C++,C++11,重载了typecast运算符int,但在编译和运行代码后,我得到了分段错误 我调试了我的程序,看到使用typecast的代码行在每次调用typecast函数本身时都会无休止地重复。有人能解释一下周围发生了什么吗 /* IN HEADER */ class ComplexNumber { private: double m_real, m_imaginary; public: ComplexNumber(double real = 0.0, double imaginary =
/* IN HEADER */
class ComplexNumber
{
private:
double m_real, m_imaginary;
public:
ComplexNumber(double real = 0.0, double imaginary = 0.0);
ComplexNumber(const ComplexNumber &obj);
ComplexNumber& operator= (const ComplexNumber &obj);
operator int();
};
ComplexNumber::ComplexNumber(double real, double imaginary):
m_real(real), m_imaginary(imaginary)
{
}
ComplexNumber::ComplexNumber(const ComplexNumber &obj):
m_real(obj.m_real), m_imaginary(obj.m_imaginary)
{
}
ComplexNumber& ComplexNumber::operator= (const ComplexNumber &obj)
{
m_real = obj.m_real;
m_imaginary = obj.m_imaginary;
return *this;
}
ComplexNumber::operator int()
{
m_real = static_cast<int>(m_real);
m_imaginary = static_cast<int>(m_imaginary);
return *this;
}
/* IN MAIN */
ComplexNumber obj(3.4, 5.6);
obj = static_cast<int>(obj);
//here it gives seg fault
头文件中的/**/
类复合数
{
私人:
双m_实,m_虚;
公众:
复数(双实=0.0,双虚=0.0);
复杂编号(常数复杂编号和obj);
ComplexNumber和operator=(const ComplexNumber和obj);
运算符int();
};
ComplexNumber::ComplexNumber(双实、双虚):
m_实(实)、m_虚(虚)
{
}
ComplexNumber::ComplexNumber(常量ComplexNumber和obj):
m_real(obj.m_real),m_virtual(obj.m_virtual)
{
}
ComplexNumber和ComplexNumber::operator=(常量ComplexNumber和obj)
{
m_real=对象m_real;
m_Imaginate=对象m_Imaginate;
归还*这个;
}
ComplexNumber::运算符int()
{
m_real=静态(m_real);
m_Imaginate=静态(m_Imaginate);
归还*这个;
}
/*大体上*/
复合物编号obj(3.4,5.6);
obj=静态铸件(obj);
//这里给出了seg故障
中的返回*this
函数的code>,*这是一个ComplexNumber
。由于函数必须返回int
,因此返回将导致转换为int
因此,我们有一个ComplexNumber
到int
的隐式转换,这导致调用ComplexNumber::operator int()
。operator int
应该返回一个int。也许您需要类似于ComplexNumber ComplexNumber::clamp(){返回ComplexNumber(static_cast,m_real),static_cast(m_Imaginate));}
?@Artyer它与*相同,给出seg错误。我希望您指的是运算符int()而不是clamp()。谢谢你的解释,那么我如何才能解决它不会重复转换?我希望typecast函数更改对象的值并返回它,但当我返回对象本身时,它仍然会进行类型转换。因此,无穷大。@BejanMuhidinov:定义转换函数是为了将对象转换为int
。它是不用于将对象中的内容转换为int
值。为此,只需使用您选择的名称定义一个普通函数,如ToLatticePoint
,该函数返回一个ComplexNumber
,并在其组件中包含所需的值。@EricPostischil oow,我现在知道了,认为转换函数是用于转换thin的gs在对象到int中。非常感谢您的解释!