Ich habe versucht, die Gültigkeit von private
Zugriffsspezifizierer in C++. Hier geht:C++ Ist privat wirklich privat?
Schnittstelle:
// class_A.h
class A
{
public:
void printX();
private:
void actualPrintX();
int x;
};
Umsetzung:
// class_A.cpp
void A::printX()
{
actualPrintX();
}
void A::actualPrintX()
{
std::cout << x:
}
ich dies in einem statischen Bibliothek gebaut (.a/LIB). Wir haben jetzt ein class_A.h und classA.a (oder classA.lib) -Paar. Ich habe class_A.h bearbeitet und die private:
daraus entfernt.
nun in einem anderen classTester.cpp:
#include "class_A.h" // the newly edited header
int main()
{
A a;
a.x = 12; // both G++ and VC++ allowed this!
a.printX(); // allowed, as expected
a.actualPrintX(); // allowed by G++, VC++ gave a unresolved linker error
return 0;
}
Ich weiß, dass aus einer Bibliothek Header sind alle Wetten nach Manipulation (ich meine, Systemintegrität, etc.) Wenn auch das Verfahren Hacky ist, das ist wirklich dürfen? Gibt es eine Möglichkeit, dies zu blockieren? Oder mache ich hier etwas falsch?
Ich weiß, dass die Cheshire Cat (Pimpl - private impl. Http://en.wikipedia.org/wiki/Cheshire_Cat_Idiom_%28programming_technique%29) Design hier möglich ist und auch, dass Zugriffsbezeichner Compile-Time-Wachen vom Compiler sind . – legends2k
Warum in aller Welt können Sie es nicht einfach neu aufbauen? –
@Dominic: Meine Absicht war zu sehen, was passiert, wenn ich versuche, auf private Teile einer Klasse zuzugreifen. – legends2k