c++ objektorientiert

  • hallo!

    muss man bei der erzeugung von objekten irgendetwas spezielles beachten im gegensatz zu java?

    bei java schreibt man eine klasse. da gibt es nun statische und nicht statische methoden und alles funktioniert fein bei der erzeugung von objekten.

    in c++ bekomme ich immer eine null-reference exception.


    ich habe nun den ganzen Code in eine andere Klasse kopiert und dann geht das mit 2 Objekten. nur ist das nicht sinn und zweck.

    was muss ich tun damit das funktioniert? irgendein spezieller aufruf oder eine deklaration, dass die variablen und methoden sowie in java nicht-statisch, also zu jeder instanz gehörend sind und nicht gemeinsam verwendet oder nur einmal deklarierbar sind?

  • Bei C++ sind nur Methoden, die mit dem Keyword 'virtual' deklariert wurden polymorph. Sonst werden sie einfach nur überdeckt.

    Ausserdem kannst Du Polymorphie nur mit Zeigern verwenden.

    Dieses Programm hätte den Output

    Code
    A
    B
    A
    B

    Das liegt daran, dass bei Nicht-Zeigern keine Polymorphie benutzt wird. Ausserdem wird b bei der Zuweisung auf a2 auf die Größe von A "zurechtgestutzt". Das kann oft ins Auge gehen. Daher solltest Du darauf Acht geben.

  • Nein, eigentlich muss man nix extra machen, das hat Java von C++ kopiert. Wie instanzierst du denn die Objekte?

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • hey, ich dank euch burschen.

    mein problem war, ich hatte nicht die Instanzierung mit
    Klasse * k = new Klasse();
    sondern mit
    Klasse k=Klasse();
    gemacht, was man nur einmal machen kann.

    wenn jemand ne erklärung für mich hätte, wäre ich dankbar.

    lg
    mw

  • Implizit wird der Standardkonstrukor der Basisklasse ausgerufen.

    Wenn Du einen anderen verwenden möchtest, musst Du das in der konstruktor-Definition angeben.

    Code
    class B : public A
    {
        B(int a) : A(a)
        {
            ...
        };
    };

    Worauf du auch Acht geben musst, ist, dass Du den Destruktor auf virtual setzt. Sonst wird nur der Destruktor der Basisklasse aufgerufen, wenn Du ein polymorphes Objekt löschst.

  • wird eigentlich der Konstruktor der Basisklasse implizit aufgerufen oder muss ich das im Konstruktor der abgeleiteten Klasse befehlen?


    Warum schaust du dir nicht ein C++ Tutorial an? Es gibt doch so einige Unterschiede zw. Java und C++ und wenn du jetzt jedes Mal hier fragst, wird das relativ viel.

    Man kanns alternativ auch ausprobieren ;) Einfach in den Basisctor eine Ausgabe schreiben und dann eine Unterklasse erzeugen :D

    Dipper dipper dii dipper dii dipper dii duuu

  • 1. mal es tut mir leid, ich habe mich verschrieben, wollte eigentlich fragen ob der destruktor der Basisklasse aufgerufen wird
    2. man wird doch noch fragen dürfen
    :sudern:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!