首页 > 试题广场 >

对于结构中的静态成员,下面哪一种说法是错误的?

[单选题]
对于结构中的静态成员,下面哪一种说法是错误的?
  • 用static修饰的成员一定要在全局空间中定义并初始化
  • 该结构的所有变量将共享静态成员的一个值
  • 无论是否说明该结构的变量,该结构的静态成员都已经存在
  • 不能用某个结构变量::静态成员来改变静态成员的值
推荐
A
A项,在C++中,类的静态成员(static member)必须在全局空间中定义并初始化,如下
class A { 
    private: 
    static int count ; // 类内声明 
};
int A::count = 0 ; // 类外初始化,不必再加static关键字
因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。
例外:能在类中初始化的成员只有一种,那就是静态常量成员。
这样不行
class A { 
    private: 
    static int count = 0; // 静态成员不能在类内初始化 
};
这样也不行
class A { 
    private: 
    const int count = 0; // 常量成员也不能在类内初始化 
};
但是这样可以
class A { 
    private: 
    static const int count = 0; // 静态整型常量成员可以在类内初始化
因此A中描述是错误的。静态常量成员可以在类内初始化。
B项,类的静态成员属于整个类,而不是某个对象,同一个类的所有变量共享静态成员的值,可以被类的所有方法访问,因此正确。
C项,在对象创建之前类的静态成员就已经分配空间,类的非静态成员要在对象创建后才有内存,因此正确。
D项,可以用类名::静态成员来改变静态成员的值,不能用结构变量::静态成员来改变静态成员的值,因此正确。



编辑于 2020-01-02 14:12:46 回复(0)
A
静态成员,指的是类中声明成员时可以加上static关键字,这样声明的成员就叫做静态成员。

静态成员的特性

  • 静态数据成员属于整个类,即使没有任何对象创建,类的静态数据成员变量也存在所以BC正确
  • 类的静态数据成员的存在不依赖与于任何类对象的存在,类的静态数据成员应该在代码中被显式地初始化,一般要在类外进行所以A错误
  • 外部访问类的静态成员能直接通过类名来访问,虽然静态成员不属于类的某个对象,但是仍然可以使用类的对象、引用或指针来访问静态成员被 static 修饰的变量属于类变量,可以通过类名.变量名直接引用;被 static 修饰的方法属于类方法,可以通过类名.方法名直接引用。所以D正确。
发表于 2020-01-01 08:19:56 回复(0)