首页 > 试题广场 >

c++的一个类中声明一个static成员变量,下面描述正确的

[不定项选择题]
c++的一个类中声明一个static成员变量,下面描述正确的是()
  • static是加了访问控制的全局变量,不被继承
  • 类和子类对象,static变量占有一份内存
  • 子类继承父类static变量
  • static 变量在创建对象时分配内存空间

类只是声明没有内存空间,类和对象就不能比较内存里面的东西

不过这A选项也是没见过这样说的。不过说的也有道理,静态变量和全局变量都是放在全局数据区的,使用静态变量要加上类名,这也是算加了使用限制的。

发表于 2019-09-01 09:42:37 回复(0)
静态数据成员是类的成员,而不是对象的成员。初始化在类体外进行,前面不加static。,引用时使用类域
发表于 2020-06-13 23:56:51 回复(0)

代码:B类公有继承A类,sizeof测B类和A类的实例化对象,结果均为1。sizeof测一个空类结果为1,如果sizeof测非空类,正常按类的大小计算。
A:static 修饰类的成员变量,访问通过:类作用域,类对象,类的静态成员函数
B:static 变量修饰的是类,不是修饰类对象。所有对象成员共享一个static成员变量。在实例化对象前,static成员变量就已经被创建。
C:子类不会继承父类static变量,而是直接访问父类的static变量。这个static变量在静态全局区。程序结束时才会释放。
D:static变量在创建对象前分配空间。
程序执行后 内存分区为:
堆区、栈区、静态区(全局区)、文字常量区、代码区。
发表于 2023-10-07 21:27:19 回复(2)
https://blog.csdn.net/m345376054/article/details/79477020
编辑于 2019-11-25 20:40:13 回复(2)
<p>d static优先于对象存在,因为static的成员随着类加载就已经存在</p>
发表于 2020-08-06 16:51:15 回复(0)

在C++中,声明一个静态成员变量需要注意以下几点:

  1. 静态成员变量在类的所有对象***享,而不是每个对象都有自己的副本。
  2. 静态成员变量必须在类的外部进行定义和初始化。在类的内部只能进行声明。
  3. 静态成员变量的初始化只能在类的外部进行,通常在类的实现文件中进行初始化。
  4. 静态成员变量可以通过类名和作用域解析运算符(::)进行访问,也可以通过对象名进行访问。
  5. 静态成员变量可以在类的内部和外部进行访问,但是在类的内部访问时不需要使用类名和作用域解析运算符。
  6. 静态成员变量的生命周期与程序的生命周期相同,即在程序运行期间都存在。

以下是一个示例代码:

class MyClass {
public:
    static int count; // 声明静态成员变量
};

int MyClass::count = 0; // 定义并初始化静态成员变量

int main() {
    MyClass obj1;
    MyClass obj2;

    obj1.count = 5; // 通过对象名访问静态成员变量
    MyClass::count = 10; // 通过类名和作用域解析运算符访问静态成员变量

    return 0;
}

编辑于 2023-09-16 18:20:38 回复(1)
C应该是对的
发表于 2021-10-31 17:16:11 回复(2)
哪位大佬解释下为什么不能继承...
发表于 2021-06-22 23:03:01 回复(1)
B是错的好吧,静态成员变量,内存位置和全局变量一样,是不占用类和对象空间的。直接sizeof一下就知道了
发表于 2020-08-29 10:20:23 回复(2)
B 和 D 是正确的描述。
A 是错误的描述。尽管 static 是全局变量,但仍然需要通过类名来访问它,如 ClassName::staticMember,并且可以被继承。
C 是错误的描述。子类不会继承父类的 static 成员变量。而是与在父类中定义的成员变量具有相同的名称和类型,独立地存在于每个类的作用域中。
因此,正确选项是 B 和 D。static 成员变量是类成员的一部分,只占据一份内存,并在类被创建时分配内存空间。由于它们是类的一部分,它们也会被继承。
发表于 2023-04-13 16:59:22 回复(1)
这AB全都不对啊 ,子类是可以继承父类的static的,只不过是占同一个内存,且不能重载;
B有歧义,静态变量不占类的内存空间
发表于 2021-01-03 09:46:40 回复(0)
为什么不被继承是对的?
发表于 2020-08-12 00:04:16 回复(1)