类的静态成员变量和类的“body”中定义的“free”变量之间的区别是什么?我的意思是我可以使用第二个代替第一个来排出班级的标题吗?
// b.h
class B
{
public:
B(int j);
void print();
private:
static int is;
};
//b.cpp
#include <iostream>
int i = 0;
int B::is = 0;
B::B(int j)
{
i = j;
is = j;
}
void B::print(){
std::cout << i << " " << is << " " << std::endl;
}
//main.cpp
int main() {
B b1(1);
b1.print();
B b2(2);
b2.print();
b1.print();
return 0;
}
输出:
1 1
2 2
2 2
答案 0 :(得分:2)
在您的情况下,区别在于静态成员数据只能由类访问,因为它在类的private
部分中声明,这在某些情况下可能是合乎需要的。任何人都可以更改全局i
。
因此,如果变量仅适用于该类,并且不应由其他人使用,那么在private
部分中使用静态成员数据是更好的解决方案。它为您提供对变量的受限访问权限。全局变量通常很糟糕,因为它可以不受限制地访问任何人。
请注意,在您的情况下,全局变量i
具有外部链接。在其他文件中,可以简单地声明为extern int i
,然后也可以使用i
和修改。
即使你使它成为static
全局变量,要使它具有内部链接,与static
成员数据相比它也不好,因为静态成员数据给你一些想法,变量仅由类使用,而不是由非类成员(如果在同一文件中)。因此,与全局static
数据相比,static
成员数据提高了可读性。