2016-06-07 15 views
-1

Ich möchte alle Funktionen in meiner Basisklasse für meinen Client unsichtbar machen, nur über meine abgeleitete Klasse zugänglich.machen Basisklasse Funktionen für Client unsichtbar

Gibt es eine Möglichkeit, dies in C++ zu tun?

Danke!

+0

sind Sie vertraut mit geschütztes Schlüsselwort? – UnKnown

+2

Machen Sie sie "geschützt". Mit 'client' meinst du die Objekte der Basisklasse? – sameerkn

+3

Unklar. Was meinst du mit "unsichtbar" und "Client"? – user4581301

Antwort

0

Es gibt zwei Möglichkeiten, eine ist

Protected Mit Stichwort

class A{ 
    protected: 
     void f(){ 
      std::cout << "F" << std::endl;s 
     } 
}; 
class B:public A{ 
    // access f() here... 
}; 

Jede abgeleitete Klasse f() Funktion von A-Klasse zugreifen können.

Zweiter Weg: machen B-Klasse Freund Klasse A.

#include <iostream> 
class A{ 
    private: 
     void f(){ 
      std::cout << "F" << std::endl; 
     } 
    friend class B; 
}; 

class B:public A{ 
    A obj; 
    public: 
     void accessF(){ 
      obj.f(); 
     } 
}; 
int main(){ 
    B obj; 
    obj.accessF(); 

    return 0; 
} 
+0

Brauchen Sie eine Vorwärtsdeklaration von 'B' für' A' zu 'Freund' es. – user4581301

+0

@ user4581301 Ich glaube nicht, ich habe es getestet. Können Sie erklären, warum es erforderlich war? – UnKnown

+0

Entschuldigung. Die Waffe gesprungen. Gleiche Namespace-Ausnahme – user4581301

0

über die Zugangs-specifier (wenn Basisklasse nicht unter Kontrolle ist):

class A 
{ public: 
    void f() {} 
    void h() {} 
}; 
class B: private A // all members of A are private 
{ public: 
    void g() 
    { f(); 
    } 
    using A::h;  // adjust access 
}; 

int main() 
{ A a; 
    a.f(); 
    B b; 
    b.g(); 
    b.h(); 
    b.f(); // error: 'void A::f()' is inaccessible 
}