关于c ++中静态函数的快速提问

时间:2011-03-03 17:56:45

标签: c++

c ++中的静态函数

所以,这个类只能有一个静态函数实例。正确?

4 个答案:

答案 0 :(得分:2)

在C ++中,静态成员函数就像普通的全局函数一样,除了名称的可见性之外:

  1. 函数名称使用类名限定。
  2. 与友元函数一样,静态成员函数可以访问私有和受保护的类成员。然而,也像友元函数一样,它没有this指针,因此它只能访问您为其提供访问权限的对象的那些部分(例如,作为参数传递)。
  3. (谢谢Alf):您不能将任何成员函数(静态或其他)声明为extern "C"

答案 1 :(得分:0)

使函数静态允许在不实例化其所属类的实例的情况下调用它。 learncpp.com还有更多关于这个主题的内容,并查看以下无法编译的示例:

class Foo
{
public:
    static void Bar1();
    void Bar2();
};

int main(int argc, char* argv[])
{
    Foo::Bar1();

    Foo x;
    x.Bar2();

    Foo::Bar2(); // <-- error C2352: 'Foo::Bar2' : illegal call of non-static member function

    return 0;
}

答案 2 :(得分:0)

静态成员函数(在类中)意味着您可以在不先创建类的实例的情况下调用该函数。这也意味着该函数无法访问任何非静态数据成员(因为没有实例可以从中获取数据)。 e.g。

class TestClass
{
 public:
   TestClass() {memberX_ = 10;}
   ~TestClass();

   // This function can use staticX_ but not memberX_
   static void staticFunction();

   // This function can use both staticX_ and memberX_
   void memberFunction();

 private:
   int memberX_;
   static int staticX_;
};

答案 3 :(得分:-2)

可以在不实际创建该类型的变量的情况下调用静态函数,例如:

class Foo
{
public:
    static void Bar();
    void SNAFU();

};

int main( void )
{
    Foo::Bar();  /* Not necessary to create an instance of Foo in order to use Bar. */
    Foo x;
    x.SNAFU();  /* Necessary to create an instance of Foo in order to use SNAFU. */
}