首页 > 试题广场 >

若有以下说明,则对n的正确访问语句是( )。

[单选题]
若有以下说明,则对n的正确访问语句是(  )。
class Y
{
//… ;
public:
    static int n;
};
int Y::n;
Y objY;

  • n=1;
  • Y::n=1;
  • objY::n=1;
  • Y>n

A错在没有写出n的作用域。C错在对象后用作用域标识符,应该用点。D选项语法就错误了,是没有意义的表达式,类和对象没法比较。


发表于 2018-12-03 23:02:02 回复(2)
静态数据成员是使用类名而不是对象名来调用 因为静态数据成员只与类有关 而与具体对象无关
发表于 2018-08-29 11:15:10 回复(1)
不管类有没有实例化,类中的静态变量一定要要类外进行初始化,而且类中的静态变量跟类的对象没有直接关联(静态变量是所有类对象都可以共用的,并不是一个类的对象声明一个静态变量)
编辑于 2018-07-27 23:51:14 回复(1)
为避免有些解析没写得很清楚误导大家,专门强调一点:类中的静态变量既可以通过类名访问,也可以通过类的对象访问。所以B和C都有可能是正确的,C不正确的原因仅仅是语法写错了,若写成objY.n=1就是正确的。
发表于 2021-05-21 16:38:01 回复(0)
class Y
{
public:
	static void func()
	{
		cout << "静态函数的调用!" << endl;
	}
	static int n;
};
int Y::n;

void test()
{
	Y objY;
	objY.n = 1;
	objY.func();
	cout << "objY.n = " << objY.n << endl;
	cout << "test()调用结束!" << endl;
}

void test1()
{
	Y::n = 1;
	Y::func();
	cout << "Y::n = " << Y::n << endl;
	cout << "test1()调用结束!" << endl;
}

int main()
{
	test();
	test1();
	system("pause");
	return 0;
}
分别用test()和test1()做了案例测试,可以看到类名初始化一个对象之后,可以用(对象.)来访问调用类中静态变量,也可以用(类名::)来访问调用类中静态变量,类中静态函数的访问调用也是如此。
发表于 2021-11-05 21:41:48 回复(0)

在给静态成员变量赋值时,需要使用作用域解析运算符::来指定静态成员变量所属的类。

根据给定的代码,n是Y类的静态成员变量。因此,正确的访问语句应该使用类名作为前缀,并使用作用域解析运算符::来访问该静态成员变量,即Y::n。选项BY::n = 1;是正确的访问语句。

发表于 2023-10-19 16:16:10 回复(0)

静态变量不需要对象就能初始化。

发表于 2018-06-17 00:02:14 回复(0)