zoukankan      html  css  js  c++  java
  • 特殊数据类型成员变量的初始化

    最近碰到了静态成员初始化问题,故在网上搜索了点资料,感觉这篇总结的蛮不错的,转来学习下。

    原文地址:http://patmusing.blog.163.com/blog/static/13583496020101814811570/

     

    有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:

    a.       常量型成员变量

    b.       引用型成员变量

    c.       静态成员变量

    d.       整型静态常量成员变量

    e.       非整型静态常量成员变量 

    对于常量型成员变量和引用型成员变量的初始化,必须通过构造函数初始化列表的方式进行。在构造函数体内给常量型成员变量和引用型成员变量赋值的方式是行不通的。

    静态成员变量的初始化也颇有点特别。

    参考下面的代码以及其中注释:

    // Initialization of Special Data Member
    #include <iostream>
    using namespace std;

    class BClass
    {
    public:
    BClass() : i(1), ci(2), ri(i) // 对于常量型成员变量和引用型成员变量,必须通过
    { // 参数化列表的方式进行初始化。在构造函数体内进
    } // 行赋值的方式,是行不通的。

    void print_values()
    {
    cout << "i =\t" << i << endl;
    cout << "ci =\t" << ci << endl;
    cout << "ri =\t" << ri << endl;
    cout << "si =\t" << si << endl;
    cout << "csi =\t" << csi << endl;
    cout << "csi2 =\t" << csi2 << endl;
    cout << "csd =\t" << csd << endl;
    }

    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)(在VC++6.0也是不允许的)
    static const double csd; // 静态常量成员变量(non-Integral type)
    //static const double csd2 = 99.9; // error: 只有静态常量整型数据成员才可以在类中初始化
    };

    // 静态成员变量的初始化(Integral type)
    int BClass::si = 0;
    // 静态常量成员变量的初始化(Integral type)
    const int BClass::csi = 1;
    // 静态常量成员变量的初始化(non-Integral type)
    const double BClass::csd = 99.9;

    // 在初始化(1)中的csi2时,根据Stanley B. Lippman的说法下面这行是必须的。
    // 但在VC2003中如果有下面一行将会产生错误,而在VC2005中,下面这行则可有可无,这个和编译器有关。
    const int BClass::csi2;

    int main(void)
    {
    BClass b_class;
    b_class.print_values();

    return 0;
    }



  • 相关阅读:
    vue前端使用JsonViewer进行json展示
    vue代理服务器proxy配置
    'vue-cli-service' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
    Python中的高阶函数和内置高阶函数(abs,map,reduce,sorted,filter)
    Ant Design Vue 通过v-decorator实现数据绑定
    Vue脚手架(vue-cli)搭建和目录结构详解
    如何使用Postman从XML提取变量
    【已解决】Vue格式化js自动加上冒号和分号
    vue.js安装与搭建
    Python函数中如何返回多个值?
  • 原文地址:https://www.cnblogs.com/danshui/p/2412164.html
Copyright © 2011-2022 走看看