zoukankan      html  css  js  c++  java
  • 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)对于继承的类来说,在初始化列表中也可以进行基类的初始化,初始化的顺序是先基类初始化,然后再根据该类自己的变量的声明顺序进行初始化。

  • 相关阅读:
    基于摸板匹配的目標跟蹤算法
    spoj 2713 Can you answer these queries IV
    zoj 3633 Alice's present
    hdu 3642 Get The Treasury
    poj 1195 Mobile phones
    poj 2760 End of Windless Days
    zoj 3540 Adding New Machine
    spoj 1716 Can you answer these queries III
    spoj 1043 Can you answer these queries I
    spoj 2916 Can you answer these queries V
  • 原文地址:https://www.cnblogs.com/freshmen/p/4482097.html
Copyright © 2011-2022 走看看