2012-04-03 8 views
1

Ich habe eine Klasse, die Objekte von zwei anderen Klassen enthält. Ich brauche eine der Klassen, um Daten von der anderen zu bekommen. Hier ist ein Beispiel.Zwei Klassen in einer größeren Klasse teilen Daten

class Nom{ /*says what we're eating*/ }; 
class Chew{ /*stuff that needs to know about what we are eating from nom*/ }; 

class BigBurrito 
{ 
    Nom n; 
    Chew c; 
}; 
+1

[Was haben Sie versucht?] (Http://whathaveyoutried.com) –

+0

* endlich realisiert den Wert von Zeigern *: O – Oatskits

+0

danke allen, hat dies einen bestimmten Namen, so dass ich darüber erfahren kann. Ich bin nicht zu erfahren, also würde ich es gerne ein bisschen genauer untersuchen. – Oatskits

Antwort

1

Wie wäre es mit einem Zeiger auf die Instanz Nom in Chew? Entlang dieser Linien:

class Nom {}; 

class Chew 
{ 
private: 
    Nom *m_nom; 
public: 
    Chew(Nom *nom) 
    : m_nom(nom) 
    {} 
}; 

class BigBurrito 
{ 
private: 
    Nom m_nom; 
    Chew m_chew; 
public: 
    BigBurrito() 
    : m_chew(&m_nom) 
    {} 
}; 
0

in einem Referenzübergeben Sie einfach auf n (Nom) an Ihren Chew Konstruktor.

+0

Nun, technisch, nur einen Parameter zum Konstruktor hinzufügen wird nichts tun ... –

+1

Nun, die Idee war, er würde etwas damit tun. :) – spencercw

1

Sie entweder einen Zeiger auf die andere Klasse ein Mitglied der Klasse machen kann

class Nom{ 
    Chew* chew; 
}; 
class Chew{ /*stuff that needs to know about what we are eating from nom*/ }; 

class BigBurrito 
{ 
    Nom n; //contains pointer to c 
    Chew c; 
}; 

oder übergeben Sie es über einen Parameter an die Funktion, die die Operation durchführt.

class Nom 
{ 
    void performOperationOnChew(Chew& c); 
}; 
class Chew{ /*stuff that needs to know about what we are eating from nom*/ }; 

class BigBurrito 
{ 
    Nom n; 
    Chew c; 
    void doTheOperation() 
    { 
     n.performOperationOnChew(c); 
    } 
}; 

Die zweite Option ist OOP-Reiniger, da Chew nicht logisch nicht zu Nom gehören.

+0

+1 Das ganze Design in der Frage scheint ein wenig verdächtig, obwohl - wenn 'Chew' eine Handlung ist, wie ich im Nachhinein seinen Namen suggeriert (ich finde es interessant, dass meine Reflexreaktion darauf ohne über Designprobleme nachzudenken ist) einen Zeiger übergeben ... hmm), warum ist es dann in 'BigBurrito' enthalten? Scheint ein bisschen seltsam. –

+0

@StuartGolodetz Ich habe tatsächlich versucht, die Namen zu abstrahieren. Ich betrachtete es einfach als Klasse A, B und C mit Komposition. :) –

+0

@StuarGolodetz yeah Ich bin gerade mit den Namen als Darstellung gekommen. Ich habe nicht wirklich sehr an sie gedacht. – Oatskits

Verwandte Themen