首页 > 试题广场 >

若有以下类Z说明,则函数fStatic中访问数据a错误的是(

[单选题]
若有以下类Z说明,则函数fStatic中访问数据a错误的是()。
class Z
{
    static int a;
public:
    static void fStatic(Z&);
};
int Z::a=0;
Z objZ;
  • void Z::fStatic()  { objZ.a =1; }
  • void Z::fStatic()  { a = 1; }
  • void Z::fStatic()  { this.a = 0; }
  • void Z::fStatic()  { Z::a = 0; }
本题考查类静态成员变量访问方法。静态成员变量又名类成员变量,为类所有,为所有类对象所有。
A选项:通过类对象访问,正确
B选项:通过类成员函数访问,正确,静态成员函数和非静态成员函数都可以直接访问
C选项:在静态成员函数中通过this指针访问,错误,this指针是指向当前类对象的指针,而fStatic是静态成员函数(是类的函数),没有this指针
D选项:通过类直接访问,正确
编辑于 2019-05-26 10:08:09 回复(0)
静态成员变量 a不具备this属性
发表于 2018-05-12 13:09:48 回复(1)
本题把a定义为静态数据成员
如果只声明了类而未定义对象,则类的一般数据成员是不占内存空间的,只有在定义对象时,才为对象的数据成员分配空间。
但是静态数据成员不属于某一个对象,在为对象所分配的空间中不包含静态数据成员所占的空间。。静态数据成员是在所有对象之外单独开辟空间。
在一个类中可以有一个或多个静态数据成员,所有的对象都共享这些静态数据成员。都可以引用它
所以说静态成员函数并不属于某一个对象,它与任何对象都无关,因此静态成员函数没有this 指针
故综上所述C选项错误
发表于 2018-05-24 14:40:02 回复(0)
本题把a定义为静态数据成员
如果只声明了类而未定义对象,则类的一般数据成员是不占内存空间的,只有在定义对象时,才为对象的数据成员分配空间。
但是静态数据成员不属于某一个对象,在为对象所分配的空间中不包含静态数据成员所占的空间。。静态数据成员是在所有对象之外单独开辟空间。
在一个类中可以有一个或多个静态数据成员,所有的对象都共享这些静态数据成员。都可以引用它
所以说静态成员函数并不属于某一个对象,它与任何对象都无关,因此静态成员函数没有this 指针
故综上所述C选项错误
发表于 2019-04-04 23:54:16 回复(1)
A选项也是错的,
A选项应该这么写才是对的:
  • void Z::fStatic(Z& objZ)  { objZ.a =1; }
因为题目的代码中还有一个objZ变量在class定义外面。
发表于 2023-04-22 09:37:44 回复(1)
原来可以通过对象访问啊。。
发表于 2020-03-17 14:20:19 回复(0)
在一个类中可以有一个或多个静态数据成员,其不属于某一个对象,它与任何对象都无关,因此静态成员函数没有this 指针 。
发表于 2018-08-18 19:18:08 回复(0)
a是静态数据成员,fStatic是静态函数成员。
在类外调用静态成员的方法有:
1)通过类作用域 类没有实例化对象也可以调用。eg Z::a 和 Z::fStatic
2) 通过对象调用 局限性 必须在有类实例化的对象 eg objZ.a 和 objZ.fStatic
3) 通过静态函数成员给静态数据成员初始化。
C错误在this, this指向调用自身的对象。静态成员函数中没有this指针,静态函数成员可以在没有对象的时候给静态数据成员赋初值。
this只能用于非静态成员函数内部



发表于 2023-09-15 20:00:36 回复(0)
A选项:通过类对象访问,正确
C选项:在静态成员函数中通过this指针访问,错误,this指针是指向当前类对象的指针,而fStatic是静态成员函数(是类的函数),没有this指针(该静态函数不再属于某个类对象,而是属于整个类)
编辑于 2022-02-19 13:28:22 回复(2)
静态成员变量可以同 a.b访问
发表于 2021-08-12 07:42:02 回复(0)
<p>可以通过对象访问,静态成员函数,没有this</p>
发表于 2020-12-01 19:40:26 回复(0)