首页 > 试题广场 >

下列描述错误的是:

[单选题]
下列描述错误的是:
  • 在创建对象前,静态成员不存在
  • 静态成员是类的成员
  • 静态成员不能是虚函数
  • 静态成员函数不能直接访问非静态成员

静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员。

静态成员分为:

  • 静态成员变量
    • 所有对象共享同一份数据
    • 编译阶段分配内存
    • 类内声明,类外初始化
  • 静态成员函数
    • 所有对象共享同一个函数
    • 静态成员函数只能访问静态成员变量
发表于 2021-04-14 15:05:09 回复(0)
在创建对象之前,静态成员已经存在。静态成员是类的成员,它们属于类本身,而不是对象。因此,即使没有创建对象,静态成员仍然存在,并且可以通过类名访问。

静态成员函数和虚函数之间存在冲突,因为它们分别涉及不同的内存模型和调用机制。

虚函数是为了支持多态性而设计的,它允许在运行时动态地确定调用的函数版本,这是通过虚函数表(vtable)来实现的。每个类的对象都包含一个指向虚函数表的指针,这样在运行时就可以根据对象的实际类型来调用相应的虚函数版本。

而静态成员函数是独立于任何特定对象的函数,它属于整个类,不涉及对象的内存分配。由于静态成员函数与特定对象无关,因此它们不会涉及虚函数表的概念。

由于静态成员函数不与特定对象相关联,因此在其内部无法使用`this`指针来访问对象的虚表指针。因此,将静态成员函数声明为虚函数是没有意义的,也是不被允许的。

因此,静态成员函数不能是虚函数,这样的设计也符合静态成员函数和虚函数各自的用途和语义。

编辑于 2023-11-14 15:34:46 回复(0)
关于静态成员函数,搬运C++prime plus中的原话:
首先,不能通过对象调用静态成员函数;
其次,由于静态成员函数不与特定对象相关联,因此只能使用静态数据成员。

关于静态成员:
类的所有对象共享同一个静态成员。
编辑于 2021-03-03 17:05:42 回复(0)
静态成员在类的所有对象中是共享的。
如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。
发表于 2020-08-10 16:32:07 回复(0)