【发布时间】:2012-12-18 13:19:44
【问题描述】:
您能否解释一下为什么以下代码可以编译并且工作正常(在 gcc-4.3.4 上检查)。我认为选择性继承不能削弱甚至加强对成员/方法的访问。不破坏封装规则吗?
#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 教我一些东西。
-
您在从标准容器私有继承时执行此操作。基本上,您禁止向上转换(这意味着您不需要虚拟析构函数),但是您允许重新实现/转发一些乏味的操作。
标签: c++ inheritance