# Objekte übergeben



## Theranium (7. Februar 2009)

Hallo Leute,

Mal eine kleine Frage: 
Wie kann ich Werte von Objekten der Klasse a mithilfe einer Funktion der Klasse b auslesen?

Klar, ich hatte schon an Vererbung gedacht. Aber damit kann ich doch nur auf die Methoden der Basis-Klasse zugreifen und neue Objekte erstellen. 
Oder sehe ich den Wald vor lauer Bäumen nicht?


----------



## engelmarkus (7. Februar 2009)

Irgendwie ist deine Frage so gestellt, dass man da jede Menge reininterpretieren kann. Kannst du vielleicht etwas genauer erklären, was du vor hast?
Wenn du auf einen Wert, ich denke, du meinst eine Eigenschaft, zugreifen willst, dann kannst du doch einfach "obj.eigenschaft" nehmen?
Durch Vererbung erweiterst du eine Basisklasse. Du kannst auf alle Eigenschaften und Methoden zugreifen, die die Basisklasse hat, außer sie sind "private".


----------



## SGSSGene (7. Februar 2009)

Ich vermute dein Problem liegt darin, das Klasse b keine Lese/Schreib rechte auf die Werte von Klasse a hat, weil dort alle Werte im "private" Berreich sind?
Dann hilft die das Schlüsselwort "friend". Damit kannst du der Klasse b die erlaubnis geben, die Privaten Variablen der Klasse a auszulesen/zu beschreiben.


----------



## 3Cyb3r (7. Februar 2009)

Was allerdings nicht so sauber wäre.


----------



## SGSSGene (7. Februar 2009)

Das stimmt, hier wären "getXX" Methoden wohl angebracht. Leider hat er zuwenige Informationen gegeben, damit man weiß worum es genau geht.
Deswegen auch der Aufruf noch mal von mir(um engelmarkus zu unterstützen), etwas mehr infos und wir können dir Besser und zu einer Eleganteren und vieleicht effizienten Methode verhelfen^^
(Häufig führt das Verstehen des Problemes zur Lösung)


----------



## Theranium (7. Februar 2009)

Vielen Dank erstmal für die vielen Antworten. 
Ich habe das mit friend versucht aber ich komme irgendwie nicht weiter.Genau genommen möchte ich Programm schreiben, dass verschieden Artikel speichert (Klasse a: Serienummer, Name etc.).
Nun möchte ich eine Tabelle aller Artikel ausgeben. Dazu nehme eine zweite Klasse b, die außerdem allgemeine Methoden enthält, die hier aber nichts zu tun haben. 
Meine Frage: Wie kann ich mit einer Methode einer fremden Klasse (b) auf diese Artikel zugreifen?

Bisher habe ich in der Beschreibung der Klasse a folgenden Code eingefügt:

```
friend class b
```
Damit sollte doch die Klasse b auf die Klasse a zugreifen können, oder?
Nur bei den Variablen scheitert es bisher. Mit einer Methode der Klasse b gelingt es mir nicht, auf eine Eigenschaft der Klasse a zuzugreifen, Ganz so, als sei die gar nicht deklariert.


----------



## deepthroat (7. Februar 2009)

Hi.





Theranium hat gesagt.:


> Vielen Dank erstmal für die vielen Antworten.
> Ich habe das mit friend versucht aber ich komme irgendwie nicht weiter.Genau genommen möchte ich Programm schreiben, dass verschieden Artikel speichert (Klasse a: Serienummer, Name etc.).
> Nun möchte ich eine Tabelle aller Artikel ausgeben. Dazu nehme eine zweite Klasse b, die außerdem allgemeine Methoden enthält, die hier aber nichts zu tun haben.
> Meine Frage: Wie kann ich mit einer Methode einer fremden Klasse (b) auf diese Artikel zugreifen?
> ...


Was du hier *beschreibst* ist alles schön und gut. Allerdings kann sich kein Mensch jetzt ein genaues Bild von dem machen was du da überhaupt tust. Hör auf deinen Code zu beschreiben, poste den Code und die Fehlermeldungen!

Wenn du alle Artikel ausgeben willst, dann mußt du erstmal eine Liste aller Artikel haben. Diese kannst du dann durchgehen und auf die einzelnen Attribute der Objekte zugreifen.

Gruß


----------



## MCoder (7. Februar 2009)

Hallo Theranium,

mit "friend" steuerst du nur die Zugriffsberechtigungen, was (glaube ich) nicht das Problem ist.
Wenn die Klasse B irgendwas von der Klasse A verarbeiten soll, dann muss von A erstmal ein Objekt (Instanz) erzeugt werden und diese muss der Klasse B bekannt gemacht werden, z.B. über einen Parameter:

```
class A
{
    ...

    public:
        std::string m_strSeriennummer 
};


class B
{
    ...

    public:
        void MachWasMitA(A obj) { obj.m_strSerienummer = ... ; }   
};

A objA;
B objB; 
objB.MachWasMitA(objA);
```
Du solltest mal etwas konkreter beschreiben, wie die beiden Klassen im Programmkontext verwendet werden sollen, damit entsprechende Lösungen gefunden werden können.

Gruß
MCoder


----------



## devDevil (8. Februar 2009)

Fällt aus  Eher ein Set-/Getter-Konstrukt verwenden. Oder sich überlegen ob das Design nicht ein wenig ungeschickt ist


----------



## Theranium (8. Februar 2009)

Ihr habt recht, das war etwas umständlich. Ich habe mir jetzt eine Liste gebastelt. Dafür brauch man ja keine zweite Klasse, sondern kann alle alle Elemente durch eine Methode der gleichen Klasse anzeigen lassen. Danke für eure Tipps. 

Jetzt habe ich allerdings noch ein weiteres Problem: 
Jeder Artikel hat natürlich einen Preis...
Aber ich habe es schon gesehen, hier im Forum gibt es zahlreiche Hinweise dafür, wie man Geldbeträge realisiert. Da werde ich mal schauen.

Ein schönes Wochenende.


----------



## 3Cyb3r (8. Februar 2009)

Mach dir ne Klasse fürn Artikel und dann legst du dir einfach ein Liste von Objekten oder Pointern auf Objekte der Klasse an.


----------

