我有这样的代码,似乎有效。我不知道为什么可以像这样访问私有静态方法。
class Base
{
public:
static void f(){std::cout<<"in base\n";};
};
class Derived:private Base
{
};
int main()
{
Derived::f();
return 0;
}
答案 0 :(得分:3)
我尝试过的所有编译器(几个g ++版本,como online,IBM xlC)拒绝了sun CC。我的猜测是你的编译器中存在一个错误。
答案 1 :(得分:1)
不,f
不应该通过Derived
访问(成员函数除外),因为Base
是私有继承的。 GCC正确报告此错误:
temp.cpp:6: error: ‘static void Base::f()’ is inaccessible
temp.cpp:17: error: within this contex
答案 2 :(得分:0)
f()
中的是私有继承的,因此您无法像这样访问它
int main()
{
Derived::f();
return 0;
}
f()
答案 3 :(得分:0)
在私有继承中,基类的所有成员都成为派生类的私人成员
Class Derived从Class Base私有派生,因此成员函数Base :: f()成为Derived类的Private成员。无法从类外部访问类的私有成员(只能在类成员函数内部访问)因此代码无法完全编译。
f()是静态函数的事实对这些继承和Access说明符的基本规则没有影响。 Base中的非静态成员函数将显示相同的行为。
如果您的编译器编译此代码,那么它有一个您应该报告的错误。