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

發佈了5 篇原創文章 · 獲贊 60 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章