использование перегруженного оператора в конструкторе? - PullRequest
0 голосов
/ 02 декабря 2019

Я пишу программу, в которой вы можете дать объекту целое число, и оно вычисляет следующее большее простое число. Задача состоит в том, чтобы перегрузить префиксный оператор и использовать его в конструкторе, так что если я создаю объект и присваиваю ему номер 11, он должен хранить следующее большее простое число (13).

перегрузка моего оператора выглядит следующим образом:

cPrimZahl& cPrimZahl::operator++()
{
    nextprim = prim;
    while (!is_Prime(nextprim))
    {
        ++nextprim;
        if (nextprim > 10000)
        {
            while (!is_Prime(nextprim))
            {
                --nextprim;
            }
            prim = nextprim;
            break;
        }
        prim = nextprim;
    }

    cout << "die naechst groessere Primzahl ist: " << prim << endl;

    return *this;
}

main:

int main(){
    cPrimZahl obj(13);  // The object here is 13 now
    ++obj1;             // Here its 17

    return 0;
}

мой конструктор:

cPrimZahl::cPrimZahl(int prim_in)
{
    if (prim_in > maxprim)  // maxprim = 10000
    {
        cout << "Prime number is to big! Adjusting..." << endl;
        prim = 1;
    }

    else if (prim_in < 0)
    {
        cout << "Prime number can't be negative! Adjusting..." << endl;
        prim = 1;
    }

    prim = prim_in;
    ++prim;   // at this point i want it to increment to give me the next bigger prime number
}

я много пробовалметоды сейчас, но я всегда получаю регулярное приращение ... Перегрузка оператора предшествует конструкции, но я также пытался поместить конструктор перед перегрузкой, ни одна из них не работает. Что еще я могу сделать?

1 Ответ

0 голосов
/ 02 декабря 2019

В конструкторе prim относится к члену prim (который предположительно имеет некоторый целочисленный тип). ++prim поэтому использует встроенный оператор предварительного увеличения для этого целочисленного типа, который будет увеличивать член prim на единицу.

Вы не хотите вызывать оператор предварительного увеличения вprim член, но для самого текущего объекта.

Текущий объект может быть получен с использованием *this, так что вызов оператора предварительного увеличения для него будет сделан с помощью ++(*this);.

В качестве альтернативы вы можете вызвать перегрузку напрямую, трактуя ее как обычную функцию-член, используя синтаксис вызова функции: operator++();

...