我的工作是创建一系列对象,并为他编写三个操作符函数,这些函数与他进行不同的操作。我不知道如何将数组作为每个函数的参数传递。当我调用第二个运算符函数friend void operator+(A &x);
时,它再次调用构造函数,但我想使用第一个函数的结果。
class A{
string name;
double array[N];
int group;
public:
A();
~A();
friend A operator--(A x);
friend void operator+(A &x);
friend A operator&(A x);
};
A operator--(A x){
A z;
// some code
return z;
}
void operator+(A &x){
//here I must use the returned object z;
}
A operator&(A x){
//here I must use the returned object z;
}
void main() {
A *a;
a = new А[2];
for (int i = 0; i < N; i++){
(--a[i]);
+(a[i]);
}
}
答案 0 :(得分:1)
如果创建的每个对象没有被另一个对象添加或减去,那么这应该有效。你在main()中的原始代码不能用clang编译,所以我修改它以使用向量。
#include <iostream>
#include <string>
#include <vector>
constexpr int N = 2;
class A
{
private:
std::string name;
double array[N];
int group;
public:
A() {};
A(std::string s, int g) : name(s), group(g) {};
~A() {};
int getGroup() { return group; }
friend void operator--(A&);
friend void operator+(A&);
};
void operator--(A& a) {
--a.group;
std::cout << "overloaded operator --" << std::endl;
}
void operator+(A& a) {
a.group += 3;
std::cout << "overloaded operator +" << std::endl;
}
using namespace std;
int main(int argc, char const *argv[])
{
std::vector<A> v;
for (int i = 0; i < N; ++i) {
v.emplace_back(A{});
}
v.emplace_back(A{"my name", 5});
for (auto& i : v) {
--(i);
cout << "group: " << i.getGroup() << endl;
--(i);
cout << "group: " << i.getGroup() << endl;
+(i);
cout << "group: " << i.getGroup() << endl;
}
return 0;
}
输出:
overloaded operator --
group: -1
overloaded operator --
group: -2
overloaded operator +
group: 1
overloaded operator --
group: -1
overloaded operator --
group: -2
overloaded operator +
group: 1
overloaded operator --
group: 4
overloaded operator --
group: 3
overloaded operator +
group: 6
如果您需要名称和组中的特定值,则可以在vector<std::pair>
或类似的a中填充a中的值,然后迭代该向量和emplace_back(A {p.first,p.second})。并添加一个接受这些值的构造函数。
答案 1 :(得分:0)
您应该通过引用传递数组 - 这意味着通过地址而不是值。
此处再次调用构造函数,因为您的对象被复制(然后重建)而不是仅作为参数传输。
答案 2 :(得分:0)
使用第一个和第三个运算符中的引用传递。就像你在第二个中那样。