frage zu klassen



  • Hallo,
    ich dachte ich muss nicht immer eine instanz einre klasse erstellen um auf ihre methoden zuzugreifen ??

    ich dachte sowas wie Klasse1::methode1() kann irgnedwo aufrufen in einer methode2 einer klasse2 ohne dass ich eine instanz der klasse 1 habe...?
    Aber es geht nicht.
    Den Header der Klasse1 include ich natürlich....

    geht das nicht so ? Wenn anders wie ? danke



  • ich dachte sowas wie Klasse1::methode1() kann irgnedwo aufrufen in einer methode2 einer klasse2 ohne dass ich eine instanz der klasse 1 habe...?

    Das geht. Allerdings nur, wenn methode1 entweder eine *statische* Memberfunktion von Klasse1 ist oder aber klasse2 von Klasse1 erbt und methode2 eine nicht-statische Memberfunktion von Klasse2 ist (in diesem Fall hast du natürlich eine Instanz von Klasse1, da du selbst eine solche bist).



  • danke danke--------
    nur funktioniert das bei mir irgendwie nicht:

    [code]

    class1
    {
    public:
    ..
    private:
    ...
    };

    class2 : class1
    {
    public:
    ...
    private:
    ...

    };

    und in den sourcen:

    class2::method3()
    {
    class1::method1();
    }



  • class2 : public class1
    

    Default-Vererbung bei Klassen ist private.

    Ansonsten: Siehe Signatur.



  • arrrrgh sorry

    hab den namespace um die klassen noch drum gehabt....



  • was ist denn das für ein humbitz?

    warum soll er erben nur damit er drauf zugreifen soll.

    man soll nur erben wenn man kann und es sinnvoll ist

    z.b. class hausflur erbt von httpclient oder was? nur weil httpclient strings auf dem bildschirm "zaubern" kann?

    oder

    class Person erbt von string, damit man eben eine spez string methide hat oder was?

    wenn es sinn macht, dann erben

    ansonsten

    Funktionszeiger verwenden!



  • @ja_dann

    ]was ist denn das für ein humbitz?
    warum soll er erben nur damit er drauf zugreifen soll.

    Zeigst du mir mal die Stelle, wo jemand gesagt hat, dass der OP irgendetwas machen soll? Ich habe ihm z.B. nur die zwei Voraussetzungen genannt, die für einen Zugriff wie beschrieben, erfüllt sein müssen. Über Sinn oder Unsinn eines solchen Zugriffs habe ich gar nicht gesprochen. Ohne konkreten Kontext lässt es sich immer schwer über Sinn oder Unsinn reden.

    Btw: Mir ist nicht klar, wie Funktionszeiger in die Thematik passen. Funktionszeiger sind zwar ne tolle Sache, haben mit dem Zugriff auf Methoden allerdings wenig zu tun.



  • Naja ich will hier nicht flamen oder sonstwie, aber er ist im c++ forum und arbeitet mit klassen. Das ist OO schon für mich genug. Wenn man sich mit klassen beschäftigt sollte man sich auch mit oo beschäftigen.

    und warum soll hier ein funktionszeiger nicht gut sein 🙄

    mit genau diesem kann man von einer klasse x aus eine methode der klasse y aufrufen.

    weiss ja nicht ob da statische methoden besser wären. weil wenn da die membervariablen mitverwendet werden müsste er ja dann diese auch statisch machen.

    deswegen funktionszeiger oder nenn es halt methodenzeiger



  • @ja_dann:

    Sorry aber was ist das für ein Humbitz? 😃

    "weil wenn da die membervariablen mitverwendet werden müsste er ja dann diese auch statisch machen." <- Ja und bei nem Methodenzeiger (wie Du ihn nennst) kann er magisch ohne Instanz auf nicht-statische Member zugreifen? 😮

    Um auf Member-Variablen zuzugreifen braucht man immer eine Instanz. Fertig. Diese Instanz kann man über Umwege sonstwie erreichen, aber es ist und bleibt eine stinknormale Instanz.



  • und warum soll hier ein funktionszeiger nicht gut sein

    Hauptsächlich weil ein Funktionszeiger überhaupt nichts mit dem Problem zu tun hat. Es geht hier um den Aufruf von Methoden und da gibt es prinzipiell zwei Möglichkeiten: a) die Methode ist statisch, dann wird für den Aufruf kein Objekt benötigt oder b) die Methode ist nicht-statisch, dann brauchst du ein Objekt. An dieser Tatsache ändern weder Funktions- noch Methodenzeiger etwas.

    mit genau diesem kann man von einer klasse x aus eine methode der klasse y aufrufen.

    Nein kann man nicht. Da Funktionszeiger nicht an Objekte gebunden sind, kann man über solche auch nur *statische* Memberfunktionen aufrufen. Wenn die Methode aber sowieso statisch ist, dann sind wir bei Fall 1 aus meinem ersten Beitrag und du kannst die Methode auch einfach direkt aufrufen.

    ja_dann schrieb:

    deswegen funktionszeiger oder nenn es halt methodenzeiger

    Es gibt einen kleinen, aber feinen Unterschied zwischen Funktions- und Methodenzeigern. Letztere müssen an ein Objekt gebunden werden um zu einer aufrufbaren Entität zu werden. Wenn du nun aber sowieso ein Objekt hast, dann kannst du die Methode auch direkt aufrufen.

    @jipii
    Was genau ist denn dein Problem bzw. was willst du erreichen?


Anmelden zum Antworten