Könnten Sie bitte erklären, warum der folgende Code kompiliert und funktioniert (überprüft auf gcc-4.3.4). Ich dachte, selektive Vererbung kann den Zugang zu Mitgliedern/Methoden nicht schwächen oder sogar verstärken. Unterbindet es nicht die Kapselungsregeln?Selektive Vererbung C++
#include <iostream>
class A {
protected:
void foo() { std::cout << "foo" << std::endl; }
};
class B : private A {
public:
using A::foo; //foo() becomes public?!
};
int main() {
B b;
b.foo();
return 0;
}
+1 für mich etwas beizubringen. –
Sie tun dies, wenn Sie privat von Standardcontainern erben. Grundsätzlich verbieten Sie das Upcasting (das bedeutet, dass Sie keinen virtuellen Destruktor benötigen), aber Sie lassen einige Operationen zu, die mühsam neu implementiert werden könnten. –