2016-11-02 3 views
-2

C++を使用してUMLタイプのアソシエーションを表現したいと思います。でも大丈夫、このコンセプトは、私が行方不明です何「『プレイヤー::プレイヤー()』の呼び出しに該当する機能C++でのアソシエーションの表現

class Player; 
class Team; 

class Player { 
private: 
    int n; 
    Team * AssociationsT; 
public: 
    Player(int x) : n(x) { 
     AssociationsT = new Team[n]; 
    } 
    void setTeam(Team * t) { 
     for(int i = 0; i < n; i++) { 
      AssociationsT[i] = t[i]; 
     } 
    } 
}; 

class Team { 
private: 
    int n; 
    Player * AssociationsP; 
public: 
    Team(int x) : n(x) { 
     AssociationsP = new Player[n]; 
    } 
    void setPlayer(Player * p) { 
     for(int i = 0; i < n; i++) { 
      AssociationsP[i] = p[i]; 
     } 
    } 
}; 
+2

さて、どのようにあなたが 'N'プレイヤオブジェクトが初期化されるだろうと想像します –

+0

:?あなたは次の線に沿って何かをしたいかもしれないようになっています。 チームt1(2); プレーヤーp1(1); プレーヤーp2(1); その後、setFunctionが呼び出します。 – monterinio

+0

@monterinio: 'AssociationsP = new Player [n];'を呼び出すとどうなると思いますか? –

答えて

0

それを:?。Unfortunetely私ではありません

AssociationsP = new Player[n]; 

でエラーが出ます?私はどこかの主な機能には、私は定義を持っていること、それを想像

#include <string> 
#include <vector> 

class Team; 

class Player { 
    const std::string name_; 
    std::vector<const Team*> AssociationsT; 
public: 
    Player(const std::string& name) : name_(name) { } 
    void setTeam(const Team& t) { 
     AssociationsT.push_back(&t); 
    } 
}; 

class Team { 
    const std::string name_; 
    std::vector<const Player*> AssociationsP; 
public: 
    Team(const std::string& name) : name_(name) { } 
    void setPlayer(const Player& p) { 
     AssociationsP.push_back(&p); 
    } 
}; 

void assignPlayerToTeam(Player& player, Team& team) 
{ 
    team.setPlayer(player); 
    player.setTeam(team); 
} 

int main() 
{ 
    Player bill("Bill"); 
    Team cubs("Cubs"); 

    assignPlayerToTeam(bill, cubs); 
} 
+0

ベクトルの代わりにリストを使用すると大きな違いがありますか? – monterinio

+0

@monterinio:あなたは索引付けをしません( 'AssociationsP [3]'と言うことはできません)。Cコードに渡すことはできず、 'list'は効率的ではありません。 –