可以派生类访问私有静态成员函数

时间:2011-04-13 14:09:00

标签: c++ static private

我有这样的代码,似乎有效。我不知道为什么可以像这样访问私有静态方法。

class Base
{
   public:
      static void f(){std::cout<<"in base\n";};
};

class Derived:private Base
{
};


int main()
{

   Derived::f();
   return 0;
}

4 个答案:

答案 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中的非静态成员函数将显示相同的行为。

如果您的编译器编译此代码,那么它有一个您应该报告的错误。