zoukankan      html  css  js  c++  java
  • C++ 初始化列表

    C++中提供了初始化列表对成员变量进行初始化。

      语法规则:class_name::class_name()

              m1(v1),m2(v2,v3),m3(v3)

            {

              .......

            }

    注意:

      成员的初始化顺序,与成员的声明顺序相同。

      成员的初始化顺序与初始化列表的位置无关。

      初始化列表比构造函数先执行。

    测试代码:  

    #include <stdio.h>
    
    class val
    {
        private:
        int i;
        public:    
        val(int val)
        {    
            i = val;
            printf("i = %d
    ",i);
        }
    };
    class Test
    {
        private:
            const int Ci=10;
            val m1;
            val m2;
        public:
            Test():m2(2),m1(1)
            {
                //Ci = 1;
                printf("Test::Test()
    ");
            }
            int get_Ci()
        {
            return Ci;
        }
    };
    
    
    int main(int argc, char *argv[])
    {
        Test Ci;
        printf("Ci = %d
    ",Ci.get_Ci());
        return 0;
    }

      运行结果:  

    i = 1
    i = 2
    Test::Test()
    Ci = 10

    类中的const成员

      类中个const成员变量会被分配空间,(所分配空间的位置取决于对象在哪个位置被声明。)

      类中的const 成员的实质是一个只读变量,可以通过指针修改其值。

      类中个const 可以使用初始化列表指定初始值,也可以在定义的时候进行初始化。、

      注意:编译器无法得到const成员的初始值,因此在类中声明的const 只读变量无法进入符号表成为一个真正意义上的常量。

    测试代码:

      

    #include <stdio.h>
    
    class val
    {
        private:
        int i;
        public:    
        val(int val)
        {    
            i = val;
            printf("i = %d
    ",i);
        }
    };
    class Test
    {
        private:
            const int Ci;
            val m1;
            val m2;
        public:
            Test():m2(2),m1(1),Ci(100)
            {
                //Ci = 1;
                printf("Test::Test()
    ");
            }
            int get_Ci()
        {
            return Ci;
        }
        void change_Ci(int CI)
        {
            int *p = const_cast<int *>(&Ci);//delete only read
            *p = CI;
        }
    };
    
    
    int main(int argc, char *argv[])
    {
        Test Ci;
        printf("Ci = %d
    ",Ci.get_Ci());
        Ci.change_Ci(1000);
        printf("Ci = %d
    ",Ci.get_Ci());
        return 0;
    }

      上面代码通过 const_cast<Type *>(&val);关键字去掉了Ci的只读属性。

      然后通过*p = CI; 修改Ci的值

    运行结果:

      

    i = 1
    i = 2
    Test::Test()
    Ci = 100
    Ci = 1000
  • 相关阅读:
    IDEA常用快捷键和常用插件集成,持续更新......
    【转】javascript日期操作详解(脚本之家整理)
    学习AngularJs:Directive指令用法
    Angular过滤器 自定义及使用方法
    【转】AngularJS 日期格式化 字典
    【转】AngularJs $location获取url参数
    【转】JavaScript对Json节点的增删改
    Asp.Net Mvc后台数据验证自测小Demo
    你必须先行上路
    【转】俞敏洪:我和马云差了8个字,结果财富相差2200亿美金
  • 原文地址:https://www.cnblogs.com/hjxzjp/p/11660894.html
Copyright © 2011-2022 走看看