2016-02-07 114 views
1

這裏我的工作就是讓對象數組併爲他寫的三家運營功能,這使得不同的操作和他在一起。我不知道如何傳遞數組作爲每個函數的參數。當我把第二個操作功能friend void operator+(A &x);,它再次調用構造函數,但我想從第一功能使用的結果。如何使用返回的對象從功能參數其他功能的C++

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

你應該通過引用傳遞你的數組 - 這意味着通過地址不是按值。

這裏,因爲你的對象被複制構造函數被再次調用(然後重建),而不是隻爲傳遞參數。

0

使用通過參考第一第三運營商以及。就像你在人做。

1

如果不加上或減去創建的每個對象與另一個對象這應該工作。在主要的原密碼()不會鏗鏘編譯所以我修改它使用一個載體。

#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})。並添加一個接受這些值的構造函數。