我是操作员重载的新手。 以下是我的代码我试图做运算符重载!操作员在我的控制台上打印出一个数组。我没有收到任何错误但是!当我运行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;
}
答案 0 :(得分:0)
您的构造函数从不设置integer
或size
。您可以使用成员初始化列表设置它们:
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
。