我有一个关于静态和非静态函数和变量的问题。
1)非静态函数访问静态变量。
好了!
class Bar
{
public:
static int i;
void nonStaticFunction() {
Bar::i = 10;
}
};
int Bar::i=0;2)非静态函数访问非静态变量
绝对没问题!
3)静态函数访问静态变量&函数
绝对没问题!
4)静态函数访问非静态函数
没问题的
class Bar
{
public:
static void staticFunction( const Bar & bar)
{
bar.memberFunction();
}
void memberFunction() const
{
}
}5)静态函数访问非静态变量
这是好还是不好?我对此感到困惑!
这个例子怎么样?
class Bar
{
public:
static void staticFunction( Bar & bar)
{
bar.memberFunction();
}
void memberFunction()
{
i = 0;
}
int i;
};发布于 2010-02-18 10:38:43
静态函数访问非静态变量
这是好还是不好?我对此感到困惑!
当被调用时,静态函数不会绑定到类的实例。类实例(对象)将是保存“非静态”变量的实体。因此,从静态函数中,您将无法访问它们,除非实际传递或在其他地方存储要操作的特定实例。
所以,是的,上一个示例中的代码是有效的,因为您被传递到一个实例中。但是,您不能执行以下操作:
static void staticFunction()
{
// error, this function is static, and is therefore
// not bound to a specific instance when called
i = 5;
}发布于 2010-02-18 10:39:39
静态意味着这独立于类的特定实例。静态方法不能访问this指针。这就是您需要使用类名调用它们的原因。
调用静态方法时,甚至可能没有定义类的任何实例。
非静态意味着一个实例,并且可以随不同的实例而不同。
因此,从静态方法访问非静态成员基本上是没有意义的。
发布于 2010-02-18 22:42:39
为此,您需要了解什么是静态的。
静态数据成员在整个类中只存在一次,而非静态数据成员则单独存在于类的每个实例中。它们将有一个类作用域,并且不绑定到类的实例。
为了访问类的静态成员,我们使用如下格式:
如果你创建了一个类的10个对象。假设,您能够访问类的静态成员中的非静态变量,当静态函数被调用时,它需要更改哪个对象的成员?
https://stackoverflow.com/questions/2285915
复制相似问题