Zurgriff auf eine Klasse



  • Hallo,

    ich habe zwei eigene Klasse im BCB eingebunden. Jetzt will ich von der Klasse "weitereklasse" auf eine public Methode von "eigeneklasse" zugreifen.

    class TForm1 : public TForm
    {
    __published:	             // Von der IDE verwaltete Komponenten
            TLabel *Label1;
                                   //Teilweise entfernt
    private:	                    // Anwender-Deklarationen
    public:		             // Anwender-Deklarationen
            eigeneklasse klasse;   //besitz public Methode hole_wert
            weitereklasse klasse2; //will in einer Methode von dieser Klasse 
                                   //auf hole_wert zugreifen nur wie ?
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    
    class weitereklasse
    {
       public:
          void test (void);
    };
    

    Wie sieht eine mögliche Implementierung von test aus wenn ich von test auf die MEthode int hole_wert (void) der Klasse "eigeneklasse" zugreifen will ?



  • maybe Vererbung, dann brauchst du auch nicht beide sondern nur eine klasse einbinden?

    du solltest dir vielleicht noch mal ein paar tutorials durchlesen. Hier auf cpp.de gibts ein paar ganz gute 🙂



  • solo,
    [quote="solo"]

    ...
    public:		             // Anwender-Deklarationen
            eigeneklasse klasse;   //besitz public Methode hole_wert
            weitereklasse klasse2; //will in einer Methode von dieser Klasse 
                                   //auf hole_wert zugreifen nur wie ?
    ...
    

    Dein Problem ist nicht der Zugriff auf die Methode "hole_wert" von "eigeneklasse", sondern der Zugriff auf die Instanz "klasse".
    "klasse2" hat einfach keine Kenntnis von "klasse" - auch wenn beide Member von "TForm1" sind.
    Eine Möglichkeit währe es, einen Zeiger auf "klasse" in "klasse2" zu hinterlegen und so Zugriff zu nehmen. Aber schön ist das nicht, was bedeutet, daß mir a) einfach nichts besseres einfällt oder b) Dein grundlegendes Klassen-Design verbesserungswürdig ist.



  • Das verstehe ich nicht. Wenn ich im Borland auf meine Form Elemente setzten sind diese doch genauso eingebettet Objekte wie meine Klasse auch. Auf diese Klassen bzw. auf die Methoden Eigenschaften dieser Objekte kann ich doch auch von einer anderen Klasse zugreifen. (z.B. ich kann aus einer Klasse die Caption von einem Label setzen).
    Wieso kann ich dann nicht auf meine Methoden der Instanz KLasse zugreifen ?

    Vererbung halte ich bei meinem Beispiel für nicht angebracht.
    Und weiß nicht, warum dieser Zeiger so schlecht sein soll. Wie soll es sonst gehen. Friend oder eine globale Instanz sind doch sicher noch eine viel schlechtere Lösung, oder ?

    Wie realisert man es am schönsten ?



  • Was hast du für ein Problem mit Vererbung? So brauchst du dir keine Gedanken zu machen wenn du eine Instanz bildest. Die Methoden stehen dir sofort zur Verfügung und du kannst sie in deiner 2. Klasse auch nutzen ohne Referenz oder Zeiger. 😕



  • Hallo,

    Ob Vererbung hier erforderlich ist, kann man ohne genaue Kenntnis des Klassendesigns nicht sagen. Man sollte Vererbung nur einsetzen wenn es unbedingt nötig ist ("ist ein"-Beziehung). Ansonsten würde sich auch anbieten eine Instanz der einen Klasse zur Membervariablen der anderen zu machen (Layering). Desweitern, könnte man die Funktion (hier test) so ändern, das man ihr eine Instanz der anderen Klasse übergeben kann.
    Es gibt viele Möglichkeiten.

    Ciao



  • Hallo,
    ich würde es so lösen. Dies ist eine der Möglichkeiten, die Braunstein beschrieben hat.

    [cpp]
    class weitereklasse
    {
    private:
    eigeneklasse klasse;

    public:
    void test (void);
    };[/cpp]

    void weitereklasse::Test()
      {
      klasse.holewert();
      }
    

Anmelden zum Antworten