一段时间后,我正在使用 C++,我已将类内的静态变量声明为私有,据我所知,静态变量独立于对象并在对象之间共享。如果我尝试在类外打印静态变量,则使用我得到编译错误的类名是因为变量是私有的吗?我确实读到静态变量可以仅通过类名和作用域解析运算符来访问。
#include <iostream>
using namespace std;
class Sample{
int val;
static int value;
public:
Sample(int in);
Sample();
void setval(int in){
val = in;
}
void printval ()const{
cout << val<<endl;
}
};
Sample::Sample(int in){
val = in;
}
Sample::Sample(){
val = 0;
}
int Sample::value = 34;
int main()
{
const Sample obj(1);
Sample obj2;
obj2.printval();
obj.printval();
cout <<"static value = " << Sample::value;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误
main.cpp:37:5: error: 'int Sample::value' is private
int Sample::value = 34;
^
main.cpp:49:39: error: within this context
cout <<"static value = " << Sample::value;
Run Code Online (Sandbox Code Playgroud)
据我所知静态变量独立于对象并在对象之间共享
那是正确的。但是,跨对象实例共享变量和使变量可访问是相互独立的。(共享的、可访问的)对有四种组合。所有四个都可供您使用:
public static 变量在类外共享和访问private static 变量是共享的,但不能在类外访问public 非静态变量不共享,但可以在类外访问private 非静态变量在类外既不共享也不可访问请注意,您处理私有静态value的方式可以按照您使用 non-static 的方式进行建模val,即通过为您的类用户提供一些公共成员函数来处理静态变量:
class Sample {
...
public:
static int getvalue() { return value; }
};
Run Code Online (Sandbox Code Playgroud)
现在你可以像这样打印它:
cout << "static value = " << Sample::getvalue();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4464 次 |
| 最近记录: |