請注意,指標引用必須括在括號中,因為成員選擇運算子比解引用操作符的優先順序更高。
因為訪問結構和類成員的指標是通過笨拙的語法,c++提供了乙個二成員選擇運算子(->)從指標做成員選擇。以下兩行是等價的:
123
4567
8910struct person
;person person;
// member selection using pointer to struct
person *ptr = &person;
(*ptr).age= 5;
這個類有兩個建構函式:乙個預設建構函式,乙個需要乙個整數的建構函式。由於兩個建構函式都要求「做乙個」建構函式的一部分,所以在每個建構函式中都有**被複製。
正如你現在(希望)學到的,有重複的**是盡可能避免的東西,所以讓我們看看一些方法來解決這個問題。
使用乙個單獨的函式
最顯而易見的解決辦法就是有foo(int)構造函式呼叫建構函式的foo()做的一部分。然而,與前c + + 11的編譯器,如果你想有乙個構造函式呼叫另乙個建構函式,它會編譯,但它不會做你期望的,你可能會花很長的時間,試圖找出原因,即使偵錯程式(事實證明,這實際上是建立乙個臨時物件然後丟棄它)。
然而,建構函式允許在類中呼叫非建構函式函式。只是要小心,任何成員的非建構函式的使用已經初始化。雖然你可能會被**從第乙個建構函式複製**到第二個建構函式,有重複的**,使你的類更難理解和更繁重的維護。這個問題的最好的解決方案是建立乙個非建構函式的函式,該函式做了共同的初始化,並有兩個構造函式呼叫該函式。
考慮到這一點,我們可以將上面的類更改為以下:
123
4567
891011
1213
1415
1617
1819
2021
class foo
public:
foo()
foo(int nvalue)
};
操作符優先順序
操作符優先順序 優先順序運算子 名稱或含義 使用形式 結合方向說明1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇 物件 物件.成員名 成員選擇 指標 物件指標 成員名2 負號運算子 表示式 右到左單目 型別 強制型別轉換 資料型別 表示式 自增運算子 變數名 變數...
操作符優先順序
優先順序 運算子含 義 要求運算 物件的個數 結合方向1 圓括號 下標運算子 指向結構體成員運算子 結構體成員運算子 自左至右2 邏輯非運算子 1 單目運算子 自右至左 按位取反運算子 自增運算子 自減運算子 負號運算子 型別 型別轉換運算子 指標運算子 位址與運算子 sizeof 長度運算子 3 ...
操作符優先順序
python 表示式語句中操作符的優先順序從最低優先順序 最後繫結 到最高優先順序 最先繫結 如下 乙個表示式語句中可以有多個上述操作符,最終返回乙個值 包括返回值為 none 的函式呼叫 而賦值語句中的賦值操作符 在操作符中優先順序最低,它右邊表示式的值計算完之後,才最後繫結到左邊的名稱。舉例如下...