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!
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!
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;
}
Brauchen Sie eine Vorwärtsdeklaration von 'B' für' A' zu 'Freund' es. – user4581301
@ user4581301 Ich glaube nicht, ich habe es getestet. Können Sie erklären, warum es erforderlich war? – UnKnown
Entschuldigung. Die Waffe gesprungen. Gleiche Namespace-Ausnahme – user4581301
ü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
}
sind Sie vertraut mit geschütztes Schlüsselwort? – UnKnown
Machen Sie sie "geschützt". Mit 'client' meinst du die Objekte der Basisklasse? – sameerkn
Unklar. Was meinst du mit "unsichtbar" und "Client"? – user4581301