Forum: PC-Programmierung objekt aus eine andere klasse holen


von Ralph (Gast)


Lesenswert?

Hallo zusammen,

programmiersprache: C++

Ich habe folgende Problem:

Ich habe Zwei Klassen:

class A
{
  ....
  double getPeriodeA();
  .....
};

#include "A.h"
class B
{

  ....
  A a;
  double helpVariable;
  helpVariable= a.getPeriodeA();
  //hier bekomme ich nicht das Value der "getPeriodeA()"
  // warum ? was mache ich denn falsch?
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ralph schrieb:
> //hier bekomme ich nicht das Value der "getPeriodeA()"

Wie diagnostizierst Du das?

Anhand Deines Code--Fragments ist nichts nachvollziehbar.

Zeige Code (echten Code), und beschreibe genau, was Du erwartest und 
was Du stattdessen erhältst.

von TestX (Gast)


Lesenswert?

Wie sieht die Fehlermeldung aus ? Wie die konkreten implementierungen 
von A und B ?

von Peter II (Gast)


Lesenswert?

Ralph schrieb:
> //hier bekomme ich nicht das Value der "getPeriodeA()"
>   // warum ? was mache ich denn falsch?

wissen wir nicht. Warum geht es denn nicht? Hast du eine Fehlermeldung?

von ozelot (Gast)


Lesenswert?

... erst vererben

class B::public class A

von Peter II (Gast)


Lesenswert?

ozelot schrieb:
> ... erst vererben

wozu? er erstellt doch ein object von a. Die Klasse B spielt überhaupt 
keine rolle.

von Rolf Magnus (Gast)


Lesenswert?

Ralph schrieb:
>   //hier bekomme ich nicht das Value der "getPeriodeA()"

Sonern?

>   // warum ? was mache ich denn falsch?

Du zeigst nutzlose Codefragmente. Bitte poste ein minimales, aber 
vollständiges Beispiel, das du so durch den Compiler hast laufen 
lassen und das das Problem zeigt.

von ozelot (Gast)


Lesenswert?

Peter II schrieb:
> wozu? er erstellt doch ein object von a. Die Klasse B spielt überhaupt
> keine rolle.

Er ruft aber eine Methode aus Klasse A in Klasse B auf.

von Ralph (Gast)


Lesenswert?

Es wird keine Fehlermeldung gezeigt, aber das Value der "getPeriodeA()" 
ist sehr klein "6.3614772330140253e-270"

von Oliver S. (oliverso)


Lesenswert?

ozelot schrieb:
> Er ruft aber eine Methode aus Klasse A in Klasse B auf.

Nein.

Oliver

von Peter II (Gast)


Lesenswert?

Ralph schrieb:
> Es wird keine Fehlermeldung gezeigt, aber das Value der "getPeriodeA()"
> ist sehr klein "6.3614772330140253e-270"

einfach mal debuggen?

von operator (Gast)


Lesenswert?

Ralph schrieb:
> Es wird keine Fehlermeldung gezeigt, aber das Value der "getPeriodeA()"
> ist sehr klein "6.3614772330140253e-270"

Schönes Beispiel von:
- Thread erstellt ohne essentiellen Informationen.
- Beim Antworten nicht auf EINE Frage eingegangen.
Den Thread muss ich mir merken.

von ozelot (Gast)


Lesenswert?

Oliver S. schrieb:
> ozelot schrieb:
>> Er ruft aber eine Methode aus Klasse A in Klasse B auf.
>
> Nein.
>
> Oliver

Verstehe ich nicht !

class B
{

  helpVariable= a.getPeriodeA();
}

getPeriodeA() ist doch nur in class A definiert ?!?

von Rolf Magnus (Gast)


Lesenswert?

Mit den gegebenen Informationen kann immer noch nur durch hellsehen oder 
mit sehr viel Glück vielleicht durch raten die Antwort finden.

ozelot schrieb:
> getPeriodeA() ist doch nur in class A definiert ?!?

Ja, und a ist ein Objekt der Klasse A. Also wird getPeriodeA() nicht für 
ein Objekt der Klasse B, sondern für eins der Klasse A aufgerufen. Warum 
sollte das nicht gehen?

operator schrieb:
> Ralph schrieb:
>> Es wird keine Fehlermeldung gezeigt, aber das Value der "getPeriodeA()"
>> ist sehr klein "6.3614772330140253e-270"
>
> Schönes Beispiel von:
> - Thread erstellt ohne essentiellen Informationen.
> - Beim Antworten nicht auf EINE Frage eingegangen.

Immerhin auf eine halbe Frage ist er eingegangen:

Rufus Τ. Firefly schrieb:
> beschreibe genau, was Du erwartest und was Du stattdessen erhältst.

Er hat zwar nicht geschrieben, was er erwartet, aber immerhin, was er 
stattdessen erhält.

> Den Thread muss ich mir merken.

Er ist ein wunderbare Beispeil dafür, wie man eine Frage stellt, wenn 
man eigentlich gar keine Antwort will.

von Narfie (Gast)


Lesenswert?

In Zeile 42 der 5. Datei des Projektes (sortiert nach Datum) fehlt das 
';'.

von BobbyX (Gast)


Lesenswert?

Die Tatsache, dass der TE nicht in der Lage ist zu verstehen welche 
informationen er uns hier überhaupt zur Verfügung stellen muss, damit 
ihm geholfen werden kann zeigt, dass er das Programmieren lieber gleich 
lassen soll.....

von Eric B. (beric)


Lesenswert?

Ralph schrieb:
> class B
> {
>
>   ....
>   A a;
>   double helpVariable;
>   helpVariable= a.getPeriodeA();
>   //hier bekomme ich nicht das Value der "getPeriodeA()"
>   // warum ? was mache ich denn falsch?
> }

Eine Klassendefinition soll keine ausführbare Code enthalten. Deine 
Zeile "helpVariable = a.getPeriodeA();" muss in irgendeine Methode oder 
Funktion rein. Lies doch mal dein C++ Buch.

von Peter II (Gast)


Lesenswert?

Eric B. schrieb:
> Eine Klassendefinition soll keine ausführbare Code enthalten. Deine
> Zeile "helpVariable = a.getPeriodeA();" muss in irgendeine Methode oder
> Funktion rein. Lies doch mal dein C++ Buch.

da er es kompilieren kann, und "nur" das falsche Ergebnis erhält wird es 
wohl daran nicht legen.

von Karl (Gast)


Lesenswert?

Rolf Magnus schrieb:
> Ja, und a ist ein Objekt der Klasse A. Also wird getPeriodeA() nicht für
> ein Objekt der Klasse B, sondern für eins der Klasse A aufgerufen. Warum
> sollte das nicht gehen?

Ich kann zwar nur Python und kein C++ und bin auch kein Experte, aber 
das vorgehen in einer Klasse eine Instanz einer anderen Klasse zu 
erzeugen halte ich für sinnlos. Um die Instanz der Klasse A zu erzeugen 
müssen der Klasse B auch alle Parameter von A bekant sein. Vererbung und 
gutes C++ Buch sind hier wahrscheinlich die hilfreichsten Ratschläge.

von Peter II (Gast)


Lesenswert?

Karl schrieb:
> Ich kann zwar nur Python und kein C++ und bin auch kein Experte, aber
> das vorgehen in einer Klasse eine Instanz einer anderen Klasse zu
> erzeugen halte ich für sinnlos.

das macht man doch ständig? Alles ist ein Objekt damit muss man 
zwangsläufig jedes objekt was member einer Klasse ist auch erzeugen.

von Heiko L. (drcaveman)


Lesenswert?

Meine Glaskugel sagt mir, dass er den Wert den er erwartet in einer 
neuen Instanz von B nicht finden wird.

von Eric B. (beric)


Lesenswert?

Karl schrieb:
> Rolf Magnus schrieb:
>> Ja, und a ist ein Objekt der Klasse A. Also wird getPeriodeA() nicht für
>> ein Objekt der Klasse B, sondern für eins der Klasse A aufgerufen. Warum
>> sollte das nicht gehen?
>
> Ich kann zwar nur Python und kein C++ und bin auch kein Experte, aber
> das vorgehen in einer Klasse eine Instanz einer anderen Klasse zu
> erzeugen halte ich für sinnlos.

Warum? Ich muss doch nicht vererben um ein Object von A in B zu 
benutzen? Und wie soll das dann aussehen wenn ich 2 oder mehrere 
Instanzen von B in A brauche?

Es gibt einen grundlegenden Unterschied zwischen "ich habe ein Auto" und 
"Ich bin ein Auto":
1
class Auto {}
2
3
class HabeAuto // und erzeuge eins innerhalb meiner Klasse
4
{
5
private:
6
  Auto meins;
7
}
8
9
class BinAuto: public Auto //erbe also vom Auto
10
{
11
}

von Karl (Gast)


Lesenswert?

Eric B. schrieb:
> Warum? Ich muss doch nicht vererben um ein Object von A in B zu
> benutzen? Und wie soll das dann aussehen wenn ich 2 oder mehrere
> Instanzen von B in A brauche?
>
> Es gibt einen grundlegenden Unterschied zwischen "ich habe ein Auto" und
> "Ich bin ein Auto":

Ich würde das anders lösen. Ich erzeuge ein Instanz der Klasse Auto und 
Referenziere bei dem Besitzer auf das Instanz des Autos, was man 
besitzt. Sowohl Auto als auch Besitzer sind Entry-Klassen. Für die 
Verknüpfung kann man dann eine Control-Klasse anlegen.

von Peter II (Gast)


Lesenswert?

Karl schrieb:
> Ich würde das anders lösen. Ich erzeuge ein Instanz der Klasse Auto und
> Referenziere bei dem Besitzer auf das Instanz des Autos, was man
> besitzt. Sowohl Auto als auch Besitzer sind Entry-Klassen. Für die
> Verknüpfung kann man dann eine Control-Klasse anlegen.

und was ist mit den ganzen anderen Eigenschaften vom Auto? Farbe, Anzahl 
sizte, Gewicht usw? Das sind alles Members von Auto. Und das können auch 
alles Objekte von anderen Klassen sein.

von Karl (Gast)


Lesenswert?

Peter II schrieb:
> und was ist mit den ganzen anderen Eigenschaften vom Auto? Farbe, Anzahl
> sizte, Gewicht usw? Das sind alles Members von Auto. Und das können auch
> alles Objekte von anderen Klassen sein.

Ändert aber nichts daran, dass ich die Objekte anderer Klassen nicht in 
der Klassendefinition initialisiere.

class Farbe():
  def _init_ (name, rgbCode):
   self.name = name
   self.rgb = rgbCode

class Auto():
  def _init_ (marke, Farbe):
   self.marke = marke
   self.farbe = Farbe

Farbe1= Farbe(rot, 0815)
Auto1 = Auto("Ford", Farbe1)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.