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

| 我有这样的代码,似乎可行。我不知道为什么可以这样访问私有静态方法。
class Base
{
   public:
      static void f(){std::cout<<\"in base\\n\";};
};

class Derived:private Base
{
};


int main()
{

   Derived::f();
   return 0;
}
    
已邀请:
我尝试过的所有编译器(几个g ++版本,como在线,IBM xlC)都拒绝了,但sun CC除外。我的猜测是这是您的编译器中的错误。     
不可以,ѭ1应该不能通过
Derived
(成员函数除外)访问,因为ѭ3是私有继承的。 GCC正确报告此错误:
temp.cpp:6: error: ‘static void Base::f()’ is inaccessible
temp.cpp:17: error: within this contex
    
在您的代码中
f()
是私有继承的,因此您不能像这样访问它
int main()
{

   Derived::f();
   return 0;
}
ѭ5的可访问性错误     
在私有继承中,所有基类成员都成为派生类的私有成员 类派生类是从类Base私有派生的,因此成员函数Base :: f()成为派生类的Private成员。不能从类外部访问类的Private成员(只能在类成员函数内部访问),因此代码无法干净地编译。 f()是静态函数这一事实对继承和访问说明符的这些基本规则没有影响。 Base中的非静态成员函数将显示相同的行为。 如果您的编译器编译此代码,则它有一个错误应报告。     

要回复问题请先登录注册