使用阶乘运算符输出数组

时间:2017-10-28 09:45:01

标签: c++

我是操作员重载的新手。 以下是我的代码我试图做运算符重载!操作员在我的控制台上打印出一个数组。我没有收到任何错误但是!当我运行main函数时,数据没有被调用。我在互联网上找不到任何东西,因为除了<<<<正在用于重载。那也没有<<但在这里我不能改变我的主要格式,所以我需要找到一种方法使其工作。任何人都可以指出我正确的方向吗? 头文件

class Data
{
private:
    int* integers;
    int size;
public:
    Data(int*  , int );
    Data& operator += (int);
    Data& operator +(int);
    Data& operator =(const Data &c);
    friend void operator!(const Data &c);

};

.cpp文件

Data::Data(int *arrayint, int size) {
    for(int i=0; i<size;i++)
    {
        if (i % 2 == 0)
        {
            arrayint[i] = 1;
        }
        else
        {
            arrayint[i] = 0;
        }
    }

}

Data &Data::operator+=(int n)
{
    for (int i = 0; i < size; i++)
    {
        integers[i] = integers[i] + n;
    }
    return *this;
}


Data &Data::operator +(int n) 
{
    return Data(*this) += n;


}

Data &Data::operator=(const Data & c)
{
    integers = c.integers;
    return *this;
}


void operator!(const Data & c)
{
    for (int i = 0; i < c.size; i++)
    {
        cout << c.integers[i];
        cout << " ";
    }
    cout << "\n";
}

int main() {

    int a[10] = { 3, 5, 6, 8, 12, 13, 16, 17, 18, 20 };

    Data *data = new Data(a, 10);
    !data;

    data = data + 5;
    !data;
    return 0;

}

1 个答案:

答案 0 :(得分:0)

您的构造函数从不设置integersize。您可以使用成员初始化列表设置它们:

Data::Data(int *arrayint, int size)
    : integers(arrayint), size(size)
{
    for(int i=0; i<size;i++)
    {
        if (i % 2 == 0)
        {
            arrayint[i] = 1;
        }
        else
        {
            arrayint[i] = 0;
        }
    }

}

或者,您可以在函数体中设置变量。在这个例子中,我将函数参数的名称更改为与成员变量不同。

Data::Data(int *arrayint, int size_)
{
    integers = arrayInt;
    size = size_;
    for(int i=0; i<size;i++)
    {
        if (i % 2 == 0)
        {
            arrayint[i] = 1;
        }
        else
        {
            arrayint[i] = 0;
        }
    }

}

最后,您对!运算符的定义与其使用不匹配。在定义中,您将参数声明为const Data&,但在其使用中,您传递Data*。将函数声明更改为Data*或将使用更改为!*data