经典指数          
原因
2057
浏览数
0
收藏数
 

在下面的类定义中,横线上应填入的内容是()
  • static int Fred::
  • int Fred::
  • int
  • static  int

     举报   纠错  
 
切换
1 个答案
为什么静态成员不能在类内初始化 在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; // 静态常量成员可以在类内初始化 };   结论: 静态常量数据成员可以在类内初始化(即类内声明的同时初始化),也可以在类外,即类的实现文件中初始化,不能在构造函数中初始化,也不能在构造函数的初始化列表中初始化; 静态非常量数据成员只能在类外,即类的实现文件中初始化,也不能在构造函数中初始化,不能在构造函数的初始化列表中初始化; 非静态的常量数据成员不能在类内初始化,也不能在构造函数中初始化,而只能且必须在构造函数的初始化列表中初始化; 非静态的非常量数据成员不能在类内初始化,可以在构造函数中初始化,也可以在构造函数的初始化列表中初始化;   总结如下表: 类型 初始化方式 类内(声明) 类外(类实现文件) 构造函数中 构造函数的初始化列表 非静态非常量数据成员 N N Y Y 非静态常量数据成员 N N N Y (must) 静态非常量数据成员 N Y (must) N N 静态常量数据成员 Y Y N N    以下三种类型必须通过初始化列表来初始化 1.非静态 常量 2. 引用类型 3. 没有默认构造函数的类类型
 
切换
撰写答案
扫描后移动端查看本题