C++中的冒号运算符 ---- : 和 ::

单冒号运算符( : )

(1)表示结构体内位域的定义(即该变量占几个bit空间)
如果是相同类型,只要位宽不超过sizeof,就一直是压缩的。超过了就重新分配。
如果是不同类型,一个元素必须在一个字节中。
举例说明:

#include <iostream>
using namespace std;

typedef struct _x{ //如一个字节所剩空间不够存放另一位域时,
    char a:1;      //应从下一单元起存放该位域
    char b:2;      //如果剩余空间足够,则放在同一个字节中 
    char c:1;
}x;

typedef struct _xx{
    char a:4;     //整个结构体的大小仍然是每个元素的对齐参数的公倍数 
    char b:5;     //每个元素类型和pragma指定的参数的最小值为对齐参数 
    char c:4;
}xx;

typedef struct _xxx
{
    int a:1; 
    int b:2; 
    int c:1; 
}xxx; 

int main()
{
    cout<<sizeof(x)<<endl;//1
    cout<<sizeof(xx)<<endl;//3
    cout<<sizeof(xxx)<<endl;//4

    return 0;
}

运行结果:
这里写图片描述

(2)用在构造函数后表示:初始化列表
初始化顺序与初始化列表中的元素顺序无关,只与类中元素的定义顺序有关。
构造函数初始化时必须采用初始化列表一共有三种情况:
1.需要初始化的数据成员是成员对象
2.需要初始化const修饰的类成员
3.需要初始化引用成员数据

(3)表示类成员的访问权限
“public:” 和”private:”“protected:”后面的冒号,表示后面定义的所有成员都是公有或私有的,直到下一个”public:”或”private:”“protected:”出现为止。在class中默认为”private:”。

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

class 派生类名 : 继承方式 基类名
{
    派生类的成员
};

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

(5)三目运算符(? :)
具体用法不再赘述
几点说明:
1、?:可以嵌套,但不推荐使用(难懂)。
2、?:具有很低的优先级,这个要注意
举例说明:

int i = 3;
int j = 2;
cout << i>j?i:j;
// 出错,<<比>具有更高的优先级,执行顺序为 
//(cout<<i)>j)?i:j,相当于是比较cout<<i与j的大小
//应当为 cout <<(i>j?i:j);

(6)语句标签
通常跟goto配合使用,如:

step1: a = f1();
//....
goto step1;

这种作法也不是很推荐

(7)switch语句中case后会使用冒号。

双冒号运算符( :: )

(1)表示“域操作符”
举例例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时, 就要写成void A::f(),表示这个f()函数是类A的成员函数。

(2)直接用在全局函数前,表示是全局函数

(3)表示引用成员函数及变量,作用域成员运算符,引用命名空间中的成员
例如:System::Math::Sqrt() 相当于System.Math.Sqrt()
例如:std::cout

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值