c++基礎知識學習---第四天

本片博客是作者在學習c++的過程中的筆記記錄,希望和各位讀者一起學習交流

靜態成員變量成員函數

  1. 靜態成員變量
    1. 定義靜態成員變量
      關鍵字static可以用於說明一個類的成員,靜態成員提供了一個同類對象的共享機制
      把一個類的成員說明爲static時,這個類無論有多少個對象被創建,這些對象共享這個static成員
      靜態成員屬於類,它不是對象成員
      用法:
         在這裏插入圖片描述
    2. 使用靜態成員變量
      當靜態成員變量是public屬性的時候,可以使用類名或者對象來直接調用,類調用的時候時要用“::”來調用,對象調用的時候要用“.”來調用
      當靜態成員變量是private屬性的時候,只能通過對象調用相應的成員函數來使用
  2. 靜態成員函數
    1. 概念
      靜態成員函數用關鍵字staic進行修飾
      在類外調用靜態成員函數的時候,用“類名::”做限定詞或者通過對象進行調用
    2. 在靜態成員函數中能使用靜態成員變量,但是不能使用普通成員變量。
      原因:如果在靜態成員函數中使用普通變量的話,那樣就不能確定這個普通變量屬於哪個對象,因此會發生錯誤

C++面向對象模型初探

  1. c++對象模型可以概括爲兩部分:
    1. 語言中直接支持面向對象程序設計的部分,主要涉及如構造函數、析構函數、虛函數、繼承(單繼承、多繼承、虛繼承)、多態等。
    2. 對於各種支持的底層實現機制
      在c語言中,“數據”和“處理數據的操作(函數)”是分開來聲明的,也就是說,語言本身並沒有支持“數據和函數”之間的關聯性。在c++中,通過抽象數據類型(abstract data type,ADT),在類中定義數據和函數,來實現數據和函數的綁定

    概括的說,c++類中有兩種成員數據:static、nonstatic;三種成員函數:static、nonstaitc、virtual

  1. 編譯器對屬性和方法的處理機制
    c++類中的成員變量和成員函數是分開存儲的

    1. 成員變量:
      普通成員變量:存儲於對象中,與struct變量有相同的內存佈局和字節對齊方式
      靜態成員函數:存儲於全局數據區中

    2. 成員函數:
      存儲於代碼段中

    3. 總結:
      c++類對象中的成員變量和成員函數是分開存儲的
      c++中類的普通成員函數都隱式包含一個指向當前對象的this指針
      靜態成員函數不包括指向具體對象的指針,普通成員函數包括一個指向具體對象的指針

  2. this指針
    this指針是指向對象自己本身的一個指針
    若方法的形參的名字和對象的屬性的名字相同,則通過this指針來解決

  3. const的修飾
    eg:class Test{
       public:
        void ope(int a)const
       {
         ;
        }
       private:
         int m_a;
       };
    這裏的const修飾的是this指針指向的內存空間,表示this指針指向的內存空間不能進行修改,this指針本省就是不可以進行修改的,因爲this指針的類型是:Test * const ,說明this指針是一個常指針。

  4. 全局函數PK成員函數

    1. 全局函數轉化成成員函數,通過this指針隱藏左操作數
      Test add(Test &t1,Test &t2)===》》》 Test add(Test &t2)
    2. 成員函數轉換成全局函數,多一個參數
      void print()===》》》void add(Test *pthis)
    3. 函數返回元素和返回引用
      函數返回引用是返回對象本身,即*this
        Test &add(Test &t2);
      返回返回元素是返回一個匿名對象
        Test add(Test &t2);

友元函數、友元類

  1. 友元函數(破壞了類的封裝性)
    1. 類中通過使用關鍵字friend 來修飾友元函數,但該函數並不是類的成員函數,其聲明可以放在類的私有部分,也可放在共有部分。友元函數的定義在類體外實現,不需要加類限定
    2. 一個類中的成員函數可以是另外一個類的友元函數,而且一個函數可以是多個類友元函數
    3. 友元函數可以訪問類中的私有成員和其他數據,但是訪問不可直接使用數據成員,需要通過對對象進行引用
    4. 友元函數在調用上同一般函數一樣,不必通過對對象進行引用

    格式:
      friend 類型 函數名(形式參數);

  1. 友元類
    1. 友元類的所有成員函數都是另一個類的友元函數,都可以訪問另一個類中的隱藏信息(包括私有成員和保護成員)
    2. 當希望一個類可以存取另一個類的私有成員時,可以將該類聲明爲另一類的友元類

    格式:
       friend class 類名;

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