Sichtbarkeit von Methoden ändern?



  • Weiß jemand, ob es legal ist die Sichtbarkeit von Methoden in abgeleiteten Klassen zu ändern? Bsp.:

    class A
    {
    protected:
       virtual void foo(); // in A protected
    };
    
    class B : public A
    {
    public:
       virtual void foo(); // in B jetzt public
    };
    

    Der MSVC 2005 schluckt es, aber ist es legal nach ISO-C++?



  • Ich bin mir nicht ganz sicher, ob ich den Standard hier richtig verstehe, aber ich würde nach dem hier sagen ja, das ist erlaubt:

    11.3 Access declarations
    The access of a member of a base class can be changed in the derived class by mentioning its qualified-id in
    the derived class declaration. Such mention is called an access declaration. The effect of an access declaration
    qualified-id ; is defined to be equivalent to the declaration using qualified-id ;.100)

    Vor allem ist es ja erlaubt da mit using zu arbeiten und ich denke mal, dass du das dem dort vorziehen solltest.

    class A
    {
    protected:
       virtual void foo(); // in A protected
    };
    
    class B : public A
    {
    public:
       using A::foo; // in B jetzt public
    };
    


  • Artchi schrieb:

    Weiß jemand, ob es legal ist die Sichtbarkeit von Methoden in abgeleiteten Klassen zu ändern? Bsp.:

    class A
    {
    protected:
       virtual void foo(); // in A protected
    };
    
    class B : public A
    {
    public:
       virtual void foo(); // in B jetzt public
    };
    

    Der MSVC 2005 schluckt es, aber ist es legal nach ISO-C++?

    Klar ist das erlaubt. Wobei ich es eher so kenne, dass man Funktionen eines Interface "private" implementiert.



  • Artchi schrieb:

    Weiß jemand, ob es legal ist die Sichtbarkeit von Methoden in abgeleiteten Klassen zu ändern?

    Der von Dir benutze Code verändert die Sichtbarkeit gar nicht! Du änderst die Zugriffsrechte! Dazwischen muß penibel unterschieden werden, weil es an einigen Stellen beim Entwurf von Klassen notwendig ist. Wenn Du die Sichtbarkeit beeinflussen willst, mußt Du zu Mittel wie dem "Pimpl" Idiom greifen.


Anmelden zum Antworten