簡體   English   中英

在構造函數中使用重載運算符?

[英]use of an overloaded operator in a constructor?

我正在寫一個程序,你可以給一個對象一個整數,它會計算出下一個更大的素數。 任務是重載前綴運算符並在構造函數中使用它,這樣如果我創建一個對象並給它數字 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;
}

主要的:

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
}

我現在嘗試了很多方法,但我總是得到一個規則的增量......運算符重載出現在構造函數之前,但我也嘗試將構造函數放在重載之前,但都不起作用。 我還可以做些什么?

在構造函數中, prim指的是prim成員(大概是某種整數類型)。 因此, ++prim正在為該整數類型使用內置的預遞增運算符,這將使prim成員遞增 1。

您不想在prim成員上調用預遞增運算符,而是在當前對象本身上調用。

可以使用*this獲取當前對象,因此可以使用++(*this); .

或者,您可以使用函數調用語法直接調用重載,將其視為普通成員函數: operator++();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM