перегрузка типа оператора - PullRequest
0 голосов
/ 25 декабря 2018

Перегружен оператор typecast int, но после компиляции и запуска кода я получаю ошибку сегментации.

Я отладил свою программу и увидел, что строка кода, где используется typecast, повторяется без завершения, каждый раз вызывая саму функцию typecast,Итак, кто-нибудь может объяснить, что там происходит?

/* 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

1 Ответ

0 голосов
/ 25 декабря 2018

В return *this; функции ComplexNumber::operator int(), *this представляет собой ComplexNumber.Поскольку функция должна возвращать int, return вызывает преобразование в int.

Таким образом, мы имеем неявное преобразование ComplexNumber в int, что приводит к тому, что ComplexNumber::operator int() будетназывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...