gpt4 book ai didi

c++ - C++ 中的运算符重载 - 一个查询

转载 作者:行者123 更新时间:2023-11-30 00:40:32 25 4
gpt4 key购买 nike

我在看一本关于 C++ 运算符重载的书,我遇到了以下代码:

class Array {   
...
public:
Array & operator << ( int x) {
// insert x at the end of the array
}
};

Next 它说:重载形式 a << x << y << z ; 将不起作用

因此它建议将第二次调用视为:
( (a << x)<< y ) << z .so 推荐使用return *this;
但我不明白 return *this 在这里如何运作?请帮忙!
这是完整的代码:

#include <iostream>
#include <cstdlib>
using namespace std;

class Array {

int *a;
int capacity;
int size;
int incr;

public:
Array (int c=10) {
a = new int[c];
capacity = c;
for (int i=0; i<c; i++) a[i]=0;
size=0;
incr = c;
}
Array &operator << (int x) {
if(size<capacity) a[size++] = x;
else {
int *tmp = new int [capacity+incr];
for (int i=0; i<size; i++) tmp[i]=a[i];
delete[] a;
a = tmp;
a[size++]=x;
capacity = capacity+incr;
}
return *this;

};
int operator [] (int i) {
if(i<size) return a[i];
};


};



int main (int argc, char *argv[]) {

int s = atoi (argv[1]);
Array A (s);
for (int i=0; i<s; i++) A << i << i+1;
for (int i=0; i<s; i++) cout << A[i] << endl;


}

最佳答案

这确实与运算符重载无关。它称为链接,使用常规成员函数更容易解释。假设您定义了一个名为 insert 的成员函数,如下所示:

Array& insert(int x) {
// insert x at the end of the array
return *this;
}

return *this 将返回对当前对象的引用,以便您可以像这样链接调用:

Array a;
a.insert(0).insert(1).insert(2);

本质上等同于:

Array a;
a.insert(0);
a.insert(1);
a.insert(2);

每次调用 insert() 都会返回对原始对象的引用,允许使用返回的引用进行其他调用。您可以重载 << 运算符来做同样的事情:

Array& operator<<(int x) {
// insert x at the end of the array
return *this;
}

现在你可以像这样链式调用:

Array a;
a << 0 << 1 << 2;

关于c++ - C++ 中的运算符重载 - 一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5822861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com