繁体   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