3 ms·
"[C++] actually allows subclasses to hide public methods from the superclass." That one doesn't even make sense. A base class (superclass) in C++ never knows a
by usefulcat 11y ago
"[C++] actually allows subclasses to hide public methods from the superclass."
That one doesn't even make sense. A base class (superclass) in C++ never knows anything about any of its descendants. So it can only ever know about methods declared in the base class, and what their visibility is in the base class. Secondly, it's true that a derived class could (for example) override a public base class method and make it private in the derived class, but that won't change the ability of the base class to call that method.
- nikbackm 11y agoIt's a bit like an explicit interface implementation in C#.
- rootlocus 11y agoThe base class is not the only client of that method.
- slavik81 11y agoYou misunderstood. When the author wrote "from the superclass" they were trying to say "declared on the superclass". It has since been updated to be clearer.
- lfowles 11y agoI actually tested this one since I had never encountered it in the wild. You can indeed call and get the expected results from the derived classes (now private) member function.
- slavik81 11y agoJust to be clear, that's not in conflict with what the author claimed. You can't call that method using a pointer to the derived class. That would be an access violation, because it was declared private. You need to use a pointer of the superclass type. struct I_A { virtual void foo() {} }; struct A : I_A { private: virtual void foo() {} }; int main() { A a; // a.foo(); // compile error I_A& ia = a; ia.foo(); // ok } To be honest, I find this behaviour useful so it doesn't upset me. It's a decent way to mark off functions that you needed to implement to satisfy an internal interface as not-for-users.