Grundsätzliche Fragen zum Arbeiten mit Klassen



  • Hallo zusammen,

    ich habe 2 allgemeine Fragen zum Arbeiten mit Klassen:

    1. Ich möchte beim Aufrufen eines Eingabe Forms alle Parameter in diesem Eingabe Form mit den Default-Weten meiner Klasse initialisieren. Auf dem Form werden int, char und float benötigt. Jetzt kann ich für jeden Typ eine Get_...() Funktion schreiben aber ich habe es i.M. über einen struct return gelöst, wo ich nur einmal eine Function aufrufen muss und alle Parameter in einem struct habe. Ist das so üblich oder wie werden mehrere Typen aus einer Klasse abgerufen zum Initialisieren von Eingabe Masken ?

    2. Wann verwendet man beim Aufrufen der Klassen Elemente den Punkt Operator und wann per Zeiger ? Was macht das für einen Unterschied ?
    MyClass M1; M1.xy = ... oder
    MyClass *M1; M1->xy = ...

    Vielen Dank für eure Hilfe

    Gruß WoWe



  • zu 1:
    Was verstehst du denn darunter

    WoWe schrieb:

    Eingabe Forms

    ??
    Ich check deine Frage nicht 😮 !

    zu 2:

    WoWe schrieb:

    2. Wann verwendet man beim Aufrufen der Klassen Elemente den Punkt Operator und wann per Zeiger ? Was macht das für einen Unterschied ?

    Naja ich denke mal deine Frage sollte lauten:
    "Wann verwendet man beim Aufrufen der Klassen Elemente den Punktoperator und wann den Pfeiloperator ?"...man kann ein Element nicht 'per Zeiger' aufrufen...

    dazu ein Beispiel:

    // 1.: Punktoperator:
    CBeispiel cObjekt; // cObjekt ist KEIN Zeiger, also Punktoperator
    cObjekt.Methode();
    // 2.: Pfeiloperator:
    CBeispiel *pcObjekt; // cObjekt ist Zeiger, also Pfeiloperator
    // pcObjekt initialisieren
    // ...
    cObjekt->Methode();
    

    Also der Unterschied:
    Beim Punktoperator ist der linke Operand ein Objekt, beim Pfeiloperator ein Zeiger!



  • Hallo CodeFinder,

    erstmal danke für deine Antwort.

    Zu 1. Mit Eingabe Form meine ich ein Formular, was vom Main-Programm aufgerufen wird, wo der Anwender bestimmte Parameter per ComboBox oder Edit-Feld ändern kann. Und die Initialisierung dieser ComboBoxen und Edit-Felder habe ich über einen Aufruf mit struct return gelöst. Meine Frage war, ist das so der richtige Programmierstil ? Klassen und "C"-struct ... ?

    Zu 2. Ja, da habe ich mich falsch ausgedrückt. Ich meinte auch den Pfeil-Operator. Aber mir ist immer noch nicht klar, wann greife ich per Punkt-Operator und wann per Pfeil-Operator auf die Klassenelemente zu ? Geschwindigkeit versus Stabilität ?!

    Gruß WoWe



  • aber ich habe es i.M. über einen struct return gelöst, wo ich nur einmal eine Function aufrufen muss und alle Parameter in einem struct habe.

    Also das ist Ansichtsache...du musst wenn du alles im Struct zurück gibst (dann sinnvollerweise per Referenz oder Zeiger) immer ein Objekt des Structs anlegen, auch wenn du nur einen Wert abfragen willst. Das kommt auf deine Verwendung an...wenn du alle Werte immer auf einmal ermitteln musst, ist das schon sinnvoll!

    Aber mir ist immer noch nicht klar, wann greife ich per Punkt-Operator und wann per Pfeil-Operator auf die Klassenelemente zu ? Geschwindigkeit versus Stabilität ?!

    Also:
    Punktoperator: Objekt auf das du zugreifen willst ist ein 'stink normeles' Objekt
    Pfeiloperator: Objekt ist ein Zeiger...

    Hmm vllt. noch n Beispiel:

    // Also man kann auf 2 verschiedene Möglichkeiten ein Objekt anlegen:
    // 1. dynmamisch:
    CDemo *pcDemoObj = new CDemo; // Wenn default Konstruktor vorhanden...klar^^
    // oder 2. statisch:
    CDemo cDemoObk;
    // Wenn du jetzt auf das erste Objekt zugreifen willst, geht das so:
    pcDemoObj->Member();
    // und auf das statisch erstellte Objekt so:
    cDemoObj.Member();
    

    Dann noch zu "Geschwindigkeit versus Stabilität ?!"...Naja das kann man ja so nicht sagen 🙄 ...kommt halt drauf an, wie deine Objektvariable vorliegt...Wenn du einer Funktion bspw. n Objekt einer Klasse übergibst, ist es meinstens sinnvoller Zeiger oder Referenzen zu nutzen, das geht schneller!

    Mit Eingabe Form meine ich ein Formular, was vom Main-Programm aufgerufen wird, wo der Anwender bestimmte Parameter per ComboBox oder Edit-Feld ändern kann

    Dann bist du im flaschen Forum, das ist entweder WinAPI oder MFC, oder oder oder 😃 , kann ich dir aber trotzdem beantworten wenn du mir das noch genauer erläuterst: 😉

    ➡

    Und die Initialisierung dieser ComboBoxen und Edit-Felder habe ich über einen Aufruf mit struct return gelöst

    Also sry unter "Aufruf mit struct return" 😮 kann ich mir nicht allzu viel vorstellen :p zeig mal deinen Code 😉



  • Der aktuelle Code würde wohl den Rahmen sprengen. Ich kürz das mal ab, wenn du meinst, aber vielleicht geht es auch so.

    Nochmal:

    Wenn ich eine eigene Klasse habe, dann kann ich den Zugriff auf ein Objekt erzeugen:

    entweder: MyClass M1; oder MyClass *M1.

    Meine Frage ist, was bringt wann welche Vorteile ? Ich hab ja die Möglichkeit beides zu tun.

    Und initialisieren von Eingabemasken aus Klassenaufrufen gehört meiner Meinung nach schon ins C++ Forum. Es ist ja egal welche Eingebemaske ich verwende, es geht mir nur um den korrekten Weg per C++ dies zu tun:

    struct XY = Get_Parameter_MyClass();

    Gruß WoWe



  • WoWe schrieb:

    Wenn ich eine eigene Klasse habe, dann kann ich den Zugriff auf ein Objekt erzeugen:
    entweder: MyClass M1; oder MyClass *M1.

    jop, wobei *M1 noch keinen gültigen Wert, das istn Pointer, der ins Nirvana zeigt!

    WoWe schrieb:

    Meine Frage ist, was bringt wann welche Vorteile ? Ich hab ja die Möglichkeit beides zu tun.

    Das eine ist statisch, d.h. von anfang, also vorm compilieren ist bekannt, wie groß das Objekt ist. Das andere ist dynamisch, du kannst also während der Programmlaufzeit (oder: während der Run-Time) festlegen, wie groß z.B. dein Klassenarray sein soll.

    habe ich über einen Aufruf mit struct return gelöst

    Heißt 'Aufruf' Methode oder Funktion, ... in C++ üblich sind Methoden!
    Dort wird alles was logisch zusammen gehört in Klassen gekapselt (Info) und die Daten mittels Methoden verarbeitet.

    Strukturen werden meistens dazu genutzt, um Daten die zusammen gehören zusammenzufassen, um dann leichter damit umgehen können, Klassen sind also ähnlich... :p

    Also das...:

    struct XY = Get_Parameter_MyClass();

    ...würd ich dir unter Geschwindigkeitsaspekten nicht empfehlen...lieber so:

    struct
    {
       int i;
       long l;
       // usw...
    } STRUKTUR;
    
    STRUKTUR& CDemo::GetInfo(void)
    {
        return (STRUKTUROBJEKT);
    }
    

    oder mit Pointern.



  • Danke, hat mich etwas weiter gebracht.

    Gruß WoWe



  • ich denke auch mal ein tutorial, oder buch über c++ und oop würde dir (zumindest bei der instanzierung von klassenobjekten) helfen!

    Denn wichtig werden zeiger bei polymorphismus etc...


Anmelden zum Antworten