Präfix Frage



  • Hi,

    gibt es eine Möglichkeit in C++ sowas zu basteln:

    Klasse* k = new Klasse;

    k->Foo::methode1();
    k->Foo::methode2();

    k->Bar::methode1();

    ?



  • Macht meiner Meinung nach nicht viel Sinn. Wieso willst du das so machen?

    class Klasse
    {
    public:
        class Foo
        {
    	public:
    		static void methode1 () {};
         static void methode2 () {};
        };
    
    };
    
    int main ()
    {
    Klasse* k = new Klasse;
    
    k->Foo::methode1 ();
    
    delete k;
    
    }
    

    Möglicherwei so.

    Edit:
    Geht so. 😉



  • drakon schrieb:

    Geht so. 😉

    nö.

    aber so:

    struct Foo
    {
       void methode1 ();
       void methode2 ();
    };
    
    struct Bar
    {
       void methode1 ();
       void methode2 ();
    };
    
    struct Klasse : Foo, Bar
    {
    };
    
    int main ()
    {
       Klasse* k = new Klasse;
       k->Bar::methode1();
       k->Foo::methode2();
    }
    


  • Sollte auch so gehen:

    class Foo
    {
    public:
        void methode1();
    };
    
    class Bar
    {
    public:
        void methode1();
        void methode2();
    };
    
    class Klasse
        : public Foo
        , public Bar
    {
    }
    
    int main ()
    {
    Klasse* k = new Klasse;
    
    k->Foo::methode1(); 
    k->Foo::methode2(); 
    
    k->Bar::methode1();
    
    delete k;
    
    }
    

    EDIT://
    Zu langsam, machen structs auch die vererbung automatisch public?



  • @darthdespotism: ich war nur schneller, weil ich mir das public beim tippen erspart habe 😃



  • queer_boy schrieb:

    drakon schrieb:

    Geht so. 😉

    nö.

    ähh.. doch das geht..



  • drakon schrieb:

    queer_boy schrieb:

    drakon schrieb:

    Geht so. 😉

    nö.

    ähh.. doch das geht..

    Comeau C/C++ 4.3.9 (Mar 27 2007 17:24:47) for ONLINE_EVALUATION_BETA1
    Copyright 1988-2007 Comeau Computing. All rights reserved.
    MODE:strict errors C++ C++0x_extensions

    "ComeauTest.c", line 17: error: qualified name is not a member of class "Klasse" or
    its base classes
    k->Foo::methode1 ();
    ^

    1 error detected in the compilation of "ComeauTest.c".


  • Administrator

    @drakon,
    Bei deinem Beispiel, müsste man die Methoden folgendermasen aufrufen:

    Klasse::Foo::methode1();
    

    @Heavy+Medic,
    Darf man fragen, wofür du das brauchst?
    Habe irgendwie noch nie gehört, dass jemand etwas in C++ in einer speziellen Form schreiben wollte, damit es auch so aussieht. Also nicht die Funktionalität im Vordergrund, sondern die Ästhetik 😃

    Grüssli



  • darthdespotism schrieb:

    drakon schrieb:

    queer_boy schrieb:

    drakon schrieb:

    Geht so. 😉

    nö.

    ähh.. doch das geht..

    Comeau C/C++ 4.3.9 (Mar 27 2007 17:24:47) for ONLINE_EVALUATION_BETA1
    Copyright 1988-2007 Comeau Computing. All rights reserved.
    MODE:strict errors C++ C++0x_extensions

    "ComeauTest.c", line 17: error: qualified name is not a member of class "Klasse" or
    its base classes
    k->Foo::methode1 ();
    ^

    1 error detected in the compilation of "ComeauTest.c".

    Schräg der VC++ mekert das nichts. 😮



  • Auf voller Warnstufe?

    Eine Warnung sollte schon drinnen sein ...

    EDIT://
    Andererseits warnt er auch bei void main() nicht wenn ich damals den VC08 Blog Eintrag richtig verstanden habe



  • Volle Warnstufe.

    Naja, war auch überrascht, dass es geht.


Anmelden zum Antworten