c++運算子多載以及一些基本概念

來源:互聯網
上載者:User

標籤:友元   算術   成員   分配   對象產生   虛函數   運行   編譯器   typeid   

c++primer第四版435

1.賦值( = ), 下標( [ ] ) ,調用 (  ( )  ), 成員訪問箭頭 (->)等操作符必須定義為成員,定義為非成員時,編譯器報錯

2. 像賦值一樣。符合賦值操作符通常應定義為類的成員,可是定義為非成員的複合賦值操作符時不會出現編譯錯誤

3.改變對象狀態或給定類型緊密聯絡的其它一些操作符,如自增,自減和解引用,通常應定義為類的成員

4.對稱操作,如算術操作符,相等操作符,關係操作符和位操作符。最好定義為普通的非成員函數


不能重載的操作符:

::       .*      .      ? :

基本注意問題:

1.成員變數的初始化順序僅僅與在聲明時的順序一樣,和初始化列表中的順序無關2.必須在初始化列表中初始化的情況: 沒有預設建構函式的類類型的成員                                                             const類型成員 和 參考型別的成員變數                 -->const 類型成員會調用拷貝建構函式 而參考型別不會調用拷貝建構函式class B;class A{    friend class B;    public:    A()    {        a_ = 0;        cout << "A()" << endl;    }    A(int a):a_(a)    {        cout << "A(int)" << endl;    }    A(const A &s)    {        a_ = s.a_;        cout << "A &" << endl;    }    private:    int a_;};class B : public A{    public:        B(A &a2, A &a3)            :a2_(a2),            a3_(a3)    {    }        void prin()        {            cout << a2_.a_ << " " << endl;        }    private:        // A a1_;        A &a2_;        const A a3_;};int main(int argc, const char *argv[]){    A a1(4), a2(5), a3(6); //--> A(int) A(int) A(int)    B b(a2, a3);    b.prin();    return 0;}-->友元類,能訪問到A類的私人成員

3.c++的兩種初始化方式:1.直接初始化:調用建構函式                                          2.複製初始化:使用=號操作符,會調用到拷貝建構函式4.當函數形參或者傳回值為類類型時,將由複製建構函式進行複製   A a1;fun(A );  --->調用fun(a)會調用拷貝建構函式,當然最後也會調用解構函式的5.拷貝建構函式為引用的原因:防止無限調用拷貝建構函式下去。拷貝建構函式傳形參值時會調用類型的拷貝建構函式,這樣無窮下去6.深拷貝 淺拷貝  :淺拷貝:對資料成員進行簡單的賦值  深拷貝:對於對象中的動態成員,不能簡單的賦值,而應該又一次動態分配空間7.空間  C++對象:先調用基類建構函式,在初始化列表上成員,再調用自己的建構函式  -->析構的時候反過來8. 重載 覆蓋 隱藏的概念9. 轉換建構函式和類型 轉換函式的差別。 類型轉換函式注意的幾點:1.成員函數, 2.不能指定傳回型別, 3.不能有參數  -->operator int()   -->函數裡面要return 一個同樣類型的出來10.多態性:靜態多態性(重載(操作符。 函數))  動態多態性:虛函數11.:使用指標訪問非虛函數:訪問指標的類型的,          使用指標訪問虛函數時:訪問指標所指對象的類型   --->  引用也是類似的,只是引用一經聲明不能改變了12.觸發動態綁定的條件:1.虛函數才幹運行動態綁定 2.必須通過基類類型的指標或者引用進行函數調用13.建構函式不能為虛函數:虛函數實在不同類型的對象產生不同的動作,如今對象還沒產生,沒有虛函數指標。訪問不到虛函數。

13.動態執行時類型識別(RTTI):typeid    返回指標或者引用所指對象的實際類型                                                      dynamic_cast    將基類的指標或引用安全的轉換成衍生類別型的指標或引用14.顯式轉換:reinterpret_cast     強制類型轉換-- >類似於c的類型轉換                      const_cast   轉換掉const屬性或者加上const屬性                      static_cast    隱式類型轉換,能夠自己主動轉換的                      dynamic_cast   主要用於有虛函數的下行轉換


??

c++運算子多載以及一些基本概念

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.