如何将函数返回的对象用作另一个函数C++的参数

How to use the returned object from function as parameter for another functions C++

本文关键字:函数 另一个 C++ 参数 对象 返回      更新时间:2023-10-16

在这里,我的工作是制作对象数组,并让他编写三个运算符函数,这些函数与他一起进行不同的操作。我不知道如何将数组作为每个函数的参数传递。当我调用第二个运算符函数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进行编译,因此我将其修改为使用向量。

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

你应该通过引用传递数组 - 这意味着通过地址而不是按值。

在这里再次调用构造函数,因为您的对象被复制(然后重建),而不仅仅是作为参数传输。

第一个第三个运算符中也使用传递引用。就像你在第二个中所做的那样。