• C++中冒号(:)的作用


    摘于:http://blog.csdn.net/zimingjushi/article/details/6549390

    (1)表示机构内位域的定义(即该变量占几个bit空间)

    typedef struct _XXX{

    unsigned char a:4;

    unsigned char c;

    } ; XXX

    (2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。

    struct _XXX{

    _XXX() : y(0xc0) {}

    };

    (3) public:和private:后面的冒号,表示后面定义的所有成员都是公有或私有的,直到下一个"public:”或"private:”出现为止。"private:"为默认处理。

    (4)类名冒号后面的是用来定义类的继承。

    class 派生类名 : 继承方式 基类名

    {

    派生类的成员

    };

    继承方式:public、private和protected,默认处理是public。

    2、类构造函数(Constructor)的初始化列表
    先说下什么叫构造函数吧(是不是啰嗦了?C++的人应该都知道了吧,还是以防万一一下)。所谓构造函数,就是与类同名的函数,它与普通函数的区别在于,它没有返回类型。
    在构造函数后面紧跟着冒号加初始化列表,各初始化变量之间以逗号(,)隔开。下面举个例子。
    class myClass
    {
    public :
    myClass();// 构造函数,无返回类型,可以有参数列表,这里省去
    ~myClass();// 析构函数
    int a;
    const int b;
    }

    myClass::myClass():a(1),b(1)// 初始化列表
    {
    }
    上面的例子展示了冒号的这个用法,下面对这个用法进行几点说明:
    1)初始化列表的作用相当于在构造函数内进行相应成员变量的赋值,但两者是有差别的。
    在初始化列表中是对变量进行初始化,而在构造函数内是进行赋值操作。两都的差别在对于像const类型数据的操作上表现得尤为明显。我们知道,const类型的变量必须在定义时进行初始化,而不能对const型的变量进行赋值,因此const类型的成员变量只能(而且必须)在初始化列表中进行初始化,即下面的代码将会出错:
    myClass::myClass()
    {
    a = 1;// 没错,效果相当于在初始化列表中进行初始化
    b = 1;// 出错,const变量不能进行赋值操作;
    }
    2)初始化的顺序与成员变量声名的顺序相同。
    先看一下下面的程序:
    myClass::myClass():b(1),a(b)
    {
    }
    这样的执行结果a,b各是多少呢?b=1,a=1?不是,b=1而a是个随机数。这一点是相当重要的哦,一般在初始化列表中进行初始化时,初始化的顺序应与声明的顺序保持一致,防止出现不必要的错误。
    3)对于继承的类来说,在初始化列表中也可以进行基类的初始化,初始化的顺序是先基类初始化,然后再根据该类自己的变量的声明顺序进行初始化。

  • 相关阅读:
    没人比程序猿更讨厌软件
    随心所欲~我也做个集合遍历器吧(自己的foreach,委托的威力)
    EF架构~DefaultValue让我的UnitOfWork更可读
    EF架构~数据分批批量提交
    陷阱~EF中的Update与Insert共用一个数据上下文
    我心中的核心组件(可插拔的AOP)~第四回 异常拦截器
    zigbee学习:示例程序SampleApp中通讯流程
    【网络可靠版】Extjs4 Treegrid 使用实例
    C#实现微信公众号群发消息(解决一天只能发一次的限制)
    oracle12c(oracle12.1.0.1.0)安装指南--实测OEL5.9(RH5)
  • 原文地址:https://www.cnblogs.com/freshmen/p/4482097.html
Copyright © 2020-2023  润新知