Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 17

Thema: objekt orienterung

  1. #1
    Registrierter Benutzer
    Registriert seit
    25.01.2003
    Ort
    A
    Beiträge
    9

    objekt orienterung

    Hallo

    Ich versuche gerade mich in die OO von C++ einzuarbeiten. Ich hab aber noch einige Probleme mit den Grundlagen der OO.
    Also ein paar Fragen.

    Was Klassen sind weiß ich so ungefähr, aber was sind Instanzen?
    Als was bezeichnet man ein Objekt? Ist eine struct auch schon ein Objekt?
    Welche Vorteile hat die OO?
    Was sind Templates?
    Was ist Klassenvererbung und Polymorphie?
    Und wie funktioniert das Überladen?

    So .. ich glaub das war's erstmal .. danke
    Mensch der sich am Prorammieren versucht

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477

    Re: objekt orienterung

    Original geschrieben von alex
    Hallo

    Ich versuche gerade mich in die OO von C++ einzuarbeiten. Ich hab aber noch einige Probleme mit den Grundlagen der OO.
    Also ein paar Fragen.
    Gleich so viele


    Was Klassen sind weiß ich so ungefähr, aber was sind Instanzen?
    Eine Instanz ist die Realisierung einer Klasse.
    Wenn man das vergleicht, wäre eine Klasse zum Beispiel eine Schablone und die Instanz das nach dieser Schablone erstellte Werkstück.


    Als was bezeichnet man ein Objekt? Ist eine struct auch schon ein Objekt?
    Ein Objekt ist ansich etwas greifbares, dass Eigenschaften hat.
    In der OOP meint man damit meist eine Instanz einer Klasse, aber aich ein int wäre ein Objekt, nur halt nicht im OOP Sinne.

    Zur struct:
    in C++ ist zwischen struct und class fast kein Unterschied.
    Wenn keine Rechteeinschränkungen (public, protected, private) vergeben werden, dann ist in einer struct alles public, in einer Klasse private.
    Sonst sind sie gleich.

    Oder als Code ausgedrückt
    Code:
    struct A{
        int a;
    };
    
    // ist äquivalent zu
    
    class A {
    public:
        int a;
    };

    Welche Vorteile hat die OO?
    Es erleichtert die Abbildung der Realität in eine Software Modell.
    In der realen Welt besteht alles aus Objekte, die Eigenschaften besitzen und auf die man bestimmte Aktionen anwenden kann.

    Diese Objekte gehören meist einer Klassenhierachie an, die gemeinsame Eigenschaften und Aktionen abstrak beschreibt.
    Beispiel:
    Männer und Frauen sind Unterklassen von Menschen.
    Menschen sind eine Unterklasse von Säugetieren.
    Jeder Mensch ist entweder eine Instanz von Mann oder eine Instanz von Frau, aber in jedem Fall hat er die Eigenschaften von Mensch und von Säugetier.

    Die OOP erlaubt es, dieses praktisch natürliche Prinzip des Zusammenfassens von Eigenschaften und Aktionen auf Software zu übertragen.

    Da Software meist ein Problem der realen Welt lösen soll, kann das Problem dadurch leichter in Software modelliert werden.


    Was sind Templates?
    Das sind generische Schablonen, um Funktionen oder Klassen zu definieren und zu erzeugen.
    Das ist ein bischen ein komplizierteres Gebiet, lässt sich nicht so einfach erklären.
    Der Gedanke dahinter ist, dass man etwas allgemeines beschreibt, dass erst zusammen mit einem Datentyp realsiert wird.


    Was ist Klassenvererbung und Polymorphie?
    Vererbung bedeuete, dass eine Klasse die Eigenschaften und Aktionen (Funktionen bzw. Methoden) von einer zuvor deklarieren Klasse übernimmt.
    So wie Mensch die Eigenschaften von Säugetier erbt.


    Und wie funktioniert das Überladen?
    eine Form der Polymorphie.
    Eine Methode(Funktion) einer Klasse existiert in verschiedenen Formen, also mit gleichem Namen aber verschiedenen Parametern.

    Code:
    class A {
        int a;
    public:
        void setA(int a);
        void setA(char a);
        void setA(float a); // diese Methode müsste intern runden    
    };
    Der Compiler nimmt bei einem Aufruf immer die Methode, deren Form am besten passt.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    25.01.2003
    Ort
    A
    Beiträge
    9
    Aha. Danke für die antworten anda_soka!

    Aber ich habe noch einige Fragen zu Klassen. In ihnen können ja auch Funktionen beschrieben werden, heißt dass dann wenn ich private Variablen in der Klasse habe, dann können die Methoden der Klassen auch ohne irgendwelche übergebenen Parameter auf diese Variablen zugreifen?
    Mensch der sich am Prorammieren versucht

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ja, können sie.

    Eine Klasse ist ein abstrakter Datentyp, der einen Inhalt hat und auf dem Funktionen definiert sind.
    Die Funktionen, in diesem Fall Methoden genannt, sind genau so Teil der Klasse, wie der Inhalt und können daher darauf zugreifen.

    Aufpassen muss man, wenn eine Methode als static deklariert ist.
    Dann kann sie nur auf Variablen zugreifen, die auch static deklariert sind.

    static bedeutet hier, dass diese Funktionen und Variablen ohne eine Instanz der Klasse funktionieren.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer
    Registriert seit
    07.03.2001
    Ort
    FStone,D
    Beiträge
    186

    hmm,

    Original geschrieben von anda_skoa

    static bedeutet hier, dass diese Funktionen und Variablen ohne eine Instanz der Klasse funktionieren.
    _
    bzw. für jede Instanz der Klasse gleich sind.zB. kannst du dir mit einer Klassenvariable (also einer static Variable) die Möglichkeit schaffen um zu schaun wieviele Instanzen wärend des Programmablaufs gerade da sind. Einfach im Konstruktor diese Var um eins erhöhen und den Destruktor diese Variable um eins erniedrigen lassen, dann haste in der Variable immer die Anzahl der momentan erzeugten Instanzen der Klasse. usw.

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.01.2003
    Ort
    A
    Beiträge
    9
    Ja danke. Aber was sind Konstruktoren bzw. Destruktoren?
    Mensch der sich am Prorammieren versucht

  7. #7
    Registrierter Benutzer
    Registriert seit
    16.09.2001
    Beiträge
    1.182

    Mal selber nachsehen...

    Servus!


    Nun, Konstruktoren sind spezielle Funktionen in einer klasse, die aufgerufen werden, wenn das object mit new erzeugt wird.

    Der destruktor wird aufgerufen, wenn das object mit delete wieder gelöscht wird.

    Wie das mit objecten aussieht, die auf den Stack aussieht, kann ich dir leider nicht sagen, Hängt wahrscheinlich mit der Sichbarkeit ab, aber bei C++ weiß man das nie genau ;-)
    Geändert von Lin728 (19-08-2017 um 15:57 Uhr)

  8. #8
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    konstruktoren/destruktoren werden auch bei einer "normalen" erzeugung auf dem stack aufgerufen.

  9. #9
    Registrierter Benutzer
    Registriert seit
    25.02.2002
    Ort
    2nd level cache
    Beiträge
    90
    Wie das mit objecten aussieht, die auf den Stack aussieht, kann ich dir leider nicht sagen, Hängt wahrscheinlich mit der Sichbarkeit ab
    Die "Sichtbarkeit" eines Objektes hängt sicherlich nicht davon ab, ob es auf dem Stack oder dem Heap erzeugt wird.

    aber bei C++ weiß man das nie genau
    Man ganz klar bestimmen wo was passiert und zwar aufs letzte Bit. Wenn man natürlich C++ dazu benutzt, um sprachliche Unklarheiten zu konstruieren ist man es doch selber Schuld oder? Das ist jetzt nicht als persönlicher Angriff zu verstehen.
    Einmal schwarzen Tee mit Milch und Zucker bitte!

  10. #10
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Es können von "außen" nur Konstruktoren benutzt werden, die public sind.
    Protected oder Private Ctors können nur von abgeleiteten Klasse, respektive der Klasse selbst benutzt werden.

    Es gibt einen speziellen Konstrukor, den Copy Konstruktor.
    Der wird benutzt, wenn ein Objekt aus einer anderen Instanz initalisiert wird.

    Wenn man in der Klasse Pointer auf Datenbereiche hat, die man in der Klasse nagelegt hat und dort auch löschen wird, muss man den Copy Ctor überschreiben, denn die Defaultimplementation kopiert sonst nur den Pointer.

    Beispiel
    Code:
    class A
    {
        int m_a;
    
    public:
        A() { m_a = 0; } // sogenannter Defaultconstructor
        A(int a) { m_a = a; } // normaler Constructor
        A(const A& other) { m_a = other.m_a; } // Copy constructor
    };
    
    A a1; // Default Constructor wird benutzt
    A a2(1234); // normaler Constructor
    A a3(a2); // Copy Ctor
    A a4 = a2; / auch copy ctor
    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  11. #11
    Registrierter Benutzer
    Registriert seit
    04.07.1999
    Ort
    Zürich
    Beiträge
    221
    @anda_skoa:
    AFAIK ist der Default C-Ctor ein bitweises Kopieren und nicht nur ein Umhängen von Pointern.

    greets
    f0rtex
    Doctrína est fructus dulcis radícis amárae.

  12. #12
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von f0rtex
    @anda_skoa:
    AFAIK ist der Default C-Ctor ein bitweises Kopieren und nicht nur ein Umhängen von Pointern.
    das hab ich doch mehr oder weniger gesagt.
    Es wird eben ur der Pointer kopiert, aber nicht das, worauf er zeigt.
    Dadurch hat man zwei Pointer auf den selben Bereich.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  13. #13
    Registrierter Benutzer
    Registriert seit
    07.03.2001
    Ort
    FStone,D
    Beiträge
    186

    hmm,

    [OffTopic]
    Ich glaub jetzt habt ihr ihn verschreckt
    [/OffTopic]

  14. #14
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    Original geschrieben von anda_skoa

    Protected oder Private Ctors können nur von abgeleiteten Klasse, respektive der Klasse selbst benutzt werden.
    hm bist du dir sicher?
    ich glaube das abgeleitete klassen nicht auf private konstruktoren zugreifen koennen, oder taeusch ich mich?

  15. #15
    Registrierter Benutzer
    Registriert seit
    07.03.2001
    Ort
    FStone,D
    Beiträge
    186

    hmm,

    seit wann werden Konstruktoren vererbt ?

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •