<p style="line-height: 19px; margin: 10px auto; color: rgb(75, 75, 75); font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px;">有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:</p><p style="line-height: 19px; margin: 10px auto; color: rgb(75, 75, 75); font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px;">a.引用</p><p style="line-height: 19px; margin: 10px auto; color: rgb(75, 75, 75); font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px;">b.常量</p><p style="line-height: 19px; margin: 10px auto; color: rgb(75, 75, 75); font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px;">c.静态</p><p style="line-height: 19px; margin: 10px auto; color: rgb(75, 75, 75); font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px;">d.静态常量(整型)</p><p style="line-height: 19px; margin: 10px auto; color: rgb(75, 75, 75); font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px;">e.静态常量(非整型)</p><p style="line-height: 19px; margin: 10px auto; color: rgb(75, 75, 75); font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px;">    常量和引用,必须通过参数列表进行初始化。
静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质见文末。</p>
#include <iostream>
using namespace std;class BClass
{
public:BClass() : i(1), ci(2), ri(i){} // 对于常量型成员变量和引用型成员变量,必须通过参数化列表的方式进行初始化//普通成员变量也可以放在函数体里,但是本质其实已不是初始化,而是一种普通的运算操作-->赋值运算,效率也低
private:int i;                                  // 普通成员变量const int ci;                           // 常量成员变量int &ri;                                // 引用成员变量static int si;                          // 静态成员变量//static int si2 = 100;                 // error: 只有静态常量成员变量,才可以这样初始化static const int csi;                   // 静态常量成员变量static const int csi2 = 100;            // 静态常量成员变量的初始化(Integral type)    (1)static const double csd;                // 静态常量成员变量(non-Integral type)//static const double csd2 = 99.9;      // error: 只有静态常量整型数据成员才可以在类中初始化
};
//注意下面三行:不能再带有static
int BClass::si = 0; // 静态成员变量的初始化(Integral type)
const int BClass::csi = 1; // 静态常量成员变量的初始化(Integral type)
const double BClass::csd = 99.9; // 静态常量成员变量的初始化(non-Integral type)// 在初始化(1)中的csi2时,根据著名大师Stanley B.Lippman的说法下面这行是必须的。
// 但在VC2003中如果有下面一行将会产生错误,而在VC2005中,下面这行则可有可无,这个和编译器有关。
//const int BClass::csi2;int main()
{BClass b;return 0;
}

---------------------------------------------------------------------------------------------

静态成员属于类作用域,但不属于类对象,和普通的static变量一样,程序一运行就分配内存并初始化,生命周期和程序一致。
所以,在类的构造函数里初始化static变量显然是不合理的。
静态成员其实和全局变量地位是一样的,只不过编译器把它的使用限制在类作用域内(不是类对象,它不属于类对象成员),要在类的定义外(不是类作用域外)初始化。

C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法相关推荐

  1. C++ 类中特殊成员变量(常量、静态、引用)的初始化方法

    有些成员变量的数据类型比较特别,它们的初始化方式和普通数据类型的成员变量有所不同.这些特殊类型的数据类型包括: 引用(&) 常量(const) 静态(static) 静态常量(static c ...

  2. C++ 类中的static成员的使用及单例设计示例

    文章目录 static 静态成员变量 static静态成员函数 单例设计模式 单例实现图片资源的封装(很实用) 静态成员:被static修饰的成员变量\函数 可以通过对象(对象.静态成员).对象指针( ...

  3. C++ 类中的static成员的初始化和特点

    原文地址:https://blog.csdn.net/men_wen/article/details/64443040 C++ 类中的static成员的初始化和特点 在C++的类中有些成员变量初始化和 ...

  4. [FxCop.设计规则]16. 不要在封闭类中声明虚成员

    16.     不要在封闭类中声明虚成员 翻译概述: 一条比较无聊的规则,并且VB.NET和C#编译器都已经内嵌的禁止代码违反这条规则. 引起的原因: 一个公共的封闭类型中包含虚成员.这条规则不检查d ...

  5. C#类中的internal成员可能是一种坏味道

    前言 最近除了搞ASP.NET MVC之外,我也在思考一些编程实践方面的问题.昨天在回家路上,我忽然对一个问题产生了较为清晰的认识.或者说,原先只是有一丝细微的感觉,而现在将它和一些其他的方面进行了联 ...

  6. 利用反射技术修改类中的字段(成员变量的反射)

    题目:利用反射技术修改类中的字段及成员变量的反射 作者:Vashon 一.首先定义一个类如下: class ReflectPoint {private int x; //私有的public int y ...

  7. 浅谈C++类中的默认成员函数

    概述 在C++中,类与C语言中的结构体类似,类与结构体的不同之处便是在其内部多了几个成员函数还有几个访问限定符,访问限定符有public(公共).protected(保护).private(私有),而 ...

  8. python中用类名访问的方法_对于 Python类中的私有成员,可以通过“对象名._类名__私有成员名”的方式来访问 答案:√...

    "华夏"之"华"为的是一()耳:生产也 < p >三.氧气在血中运之主文曰:< / p >也:心氧合血红蛋白 设启显辈可由启显组线性示, ...

  9. C++ 类中的static成员的初始化

    #include <iostream> using namespace std; class Test { public:     Test() : y(1), r(y), d(3){} ...

最新文章

  1. 关于mysql archive存储引擎-专门存储审计和日志数据
  2. Policy Injection Application Block
  3. Ansj中文分词Java开发自定义和过滤词库
  4. BZOJ-3110-K大数查询-ZJOI2013-整体二分
  5. Netflix正在搞的混沌工程到底是什么?终于有人讲明白了
  6. ***linux下mysql的root密码忘记解决方法
  7. 一文搞懂四种同步工具类
  8. Dxperience 7.3.4 简体中文本地化
  9. 金华资产封存页面问题
  10. 加入域时出现以下错误:找不到网络路径
  11. 网路是怎样连接的(十二)IP地址怎么看
  12. Android 各国语言包字符串缩写
  13. 网易交互设计师微专业C3 规范信息架构与流程设计
  14. 床帘机器人_如何打造一个更舒适更智能的大学宿舍?
  15. 美柚:女性移动APP安全攻防战
  16. Android 打印Log语句
  17. php 自定义生成短链工具
  18. 腾讯云轻量应用服务器和云服务器的区别是什么?
  19. 风雨砥砺,岁月如歌——Ts之箭头函数
  20. 数字科技行业的“挖井人”:京东数科不做一锤子买卖

热门文章

  1. (原)学习ORACLE 视图
  2. iOS 自定义Cell按钮的点击代理事件
  3. Nginx + php
  4. linear-gradient线性渐变
  5. Yii框架中使用PHPExcel导出Excel文件
  6. windows驱动开发详解学习笔记
  7. SRE(Simple Rule Engine) Document
  8. 1月28日云栖精选夜读 | 终于等到你!阿里正式向 Apache Flink 贡献 Blink 源码
  9. centos6.4与win7双系统时间同步错误解决办法
  10. linux下面的查找