非静态与静态函数和变量

sky*_*oor 10 c++

我有一个关于静态和非静态函数和变量的问题.

1)非静态函数访问静态变量.

没关系!

class Bar
{
public:

     static int i;

     void nonStaticFunction() {

         Bar::i = 10;

     }

};

int Bar::i=0;
Run Code Online (Sandbox Code Playgroud)

2)非静态函数访问非静态变量

绝对可以!

3)静态函数访问静态变量和函数

绝对可以!

4)静态功能访问非静态功能

没关系

class Bar
{
public:
     static void staticFunction( const Bar & bar)
     {
         bar.memberFunction();

     }

     void memberFunction() const
     {

     }

}
Run Code Online (Sandbox Code Playgroud)

5)静态函数访问非静态变量

好还是不行?我对此感到困惑!

这个例子怎么样?

class Bar
{
public:
     static void staticFunction( Bar & bar)
     {
         bar.memberFunction();

     }

     void memberFunction()
     {

         i = 0;
     }

     int i;

};
Run Code Online (Sandbox Code Playgroud)

Dou*_* T. 13

静态函数访问非静态变量

好还是不行?我对此感到困惑!

调用时,静态函数不绑定到类的实例.类实例(对象)将成为包含"非静态"变量的实体.因此,从静态函数中,如果没有实际传递或存储在其他地方操作的特定实例,您将无法访问它们.

所以是的,你上一个例子中的代码是有效的,因为你是在一个实例中传递的.但是,你做不到:

static void staticFunction()
{
    // error, this function is static, and is therefore
    // not bound to a specific instance when called
    i = 5;


}
Run Code Online (Sandbox Code Playgroud)


小智 7

静态意味着它独立于类的特定实例.静态方法无法访问this指针.这就是你需要使用类名调用它们的原因.

当您调用Static方法时,您甚至可能没有定义任何类的实例.

非静态意味着一个实例,并且可能与不同的实例不同.

因此,基本上,从静态方法访问非静态成员是没有意义的.