首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非静态函数与静态函数和变量

问非静态函数与静态函数和变量
EN

Stack Overflow用户
提问于 2010-02-18 10:35:17
回答 4查看 23.1K关注 0票数 10

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

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

好了!

代码语言:javascript
复制
class Bar
{
public:

     static int i;

     void nonStaticFunction() {

         Bar::i = 10;

     }

};

int Bar::i=0;

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

绝对没问题!

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

绝对没问题!

4)静态函数访问非静态函数

没问题的

代码语言:javascript
复制
class Bar
{
public:
     static void staticFunction( const Bar & bar)
     {
         bar.memberFunction();

     }

     void memberFunction() const
     {

     }

}

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

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

这个例子怎么样?

代码语言:javascript
复制
class Bar
{
public:
     static void staticFunction( Bar & bar)
     {
         bar.memberFunction();

     }

     void memberFunction()
     {

         i = 0;
     }

     int i;

};
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-18 10:38:43

静态函数访问非静态变量

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

当被调用时,静态函数不会绑定到类的实例。类实例(对象)将是保存“非静态”变量的实体。因此,从静态函数中,您将无法访问它们,除非实际传递或在其他地方存储要操作的特定实例。

所以,是的,上一个示例中的代码是有效的,因为您被传递到一个实例中。但是,您不能执行以下操作:

代码语言:javascript
复制
static void staticFunction()
{
    // error, this function is static, and is therefore
    // not bound to a specific instance when called
    i = 5;


}
票数 13
EN

Stack Overflow用户

发布于 2010-02-18 10:39:39

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

调用静态方法时,甚至可能没有定义类的任何实例。

非静态意味着一个实例,并且可以随不同的实例而不同。

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

票数 8
EN

Stack Overflow用户

发布于 2010-02-18 22:42:39

为此,您需要了解什么是静态的。

静态数据成员在整个类中只存在一次,而非静态数据成员则单独存在于类的每个实例中。它们将有一个类作用域,并且不绑定到类的实例。

为了访问类的静态成员,我们使用如下格式:

如果你创建了一个类的10个对象。假设,您能够访问类的静态成员中的非静态变量,当静态函数被调用时,它需要更改哪个对象的成员?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2285915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档