gpt4 book ai didi

c++ - 如何使用函数返回的对象作为另一个函数的参数 C++

转载 作者:行者123 更新时间:2023-11-30 05:32:07 26 4
gpt4 key购买 nike

我这里的工作是做对象数组,给他写三个运算符函数,跟他做不同的操作。我不知道如何将数组作为每个函数的参数传递。当我调用第二个运算符函数 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]);
}
}

最佳答案

如果创建的每个对象都没有被添加或减去另一个对象,这应该有效。您在 main() 中的原始代码无法使用 clang 进行编译,因此我将其修改为使用 vector 。

#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> 中填充值或类似的,然后迭代该 vector 和 emplace_back(A{p.first, p.second})。并添加一个接受这些值的构造函数。

关于c++ - 如何使用函数返回的对象作为另一个函数的参数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35253699/

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