[英]non-static vs. static function and variable
我有一个关于静态和非静态函数和变量的问题。
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;
};
静态函数访问非静态变量
好还是不行? 我对此感到困惑!
调用时,静态函数不绑定到类的实例。 类实例(对象)将成为包含“非静态”变量的实体。 因此,从静态函数中,如果没有实际传递或存储在其他地方操作的特定实例,您将无法访问它们。
所以是的,你上一个例子中的代码是有效的,因为你是在一个实例中传递的。 但是,你做不到:
static void staticFunction()
{
// error, this function is static, and is therefore
// not bound to a specific instance when called
i = 5;
}
静态意味着它独立于类的特定实例。 静态方法无权访问this
指针。 这就是你需要使用类名调用它们的原因。
当您调用Static方法时,您甚至可能没有定义任何类的实例。
非静态意味着一个实例,并且可能与不同的实例不同。
因此,基本上,从静态方法访问非静态成员是没有意义的。
不行。 无需具有类的实例即可访问静态函数,因此无法访问您需要实例确定的信息。
例如,你不需要汽车知道它有多少轮子,一般汽车的蓝图就足够了(这可能是静态信息),但除非你指的是汽车,否则你无法分辨汽车的颜色。特定的汽车(该信息需要一个特定的对象实例。)
为此,您需要了解什么是静态的。
对于整个类,静态数据成员存在一次,而非静态数据成员则在类的每个实例中单独存在。 它们将具有类范围,并且不绑定到类的实例。
要访问类的静态成员,我们使用以下格式::
如果你创建了一个类的10个对象。 假设,您能够访问类的静态成员中的非静态变量,当调用静态函数时,需要更改哪个对象的成员?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.