C++類的靜態成員_11


一。成員變量的回顧

  1.通過對象名能夠訪問 public 成員變量。

  2.每個對象都可以有只屬於自己的成員變量

  3.成員變量不能在對象之間共享。

二。類的靜態成員

  1. C++中可以定義靜態成員變量和靜態成員函數

  2. 靜態成員屬於整個類所有,不需要依賴任何對象。

  3. 可以通過類名直接訪問public 靜態成員

  4. 可以通過對象名訪問public靜態成員

  5. 靜態成員函數可以直接訪問靜態成員變量。

三。靜態成員變量的定義

  1. 在定義時直接通過 static 關鍵字修飾

  2. 靜態成員變量不依賴於任何對象,需要在類外單獨分配空間。

  3. 語法規則:Type ClassName::VarName:

#include <cstdlib>
#include <iostream>

using namespace std;
class Test
{
  private:
        static int ci;       
  public:  
        static int GetI()
        {
            return ci;    
        }
        static void SetI(int i)
        {
              ci = i;  
        }
};
int Test::ci = 0;

int main(int argc, char *argv[])
{
    Test::SetI(5);
    cout<<"Test::ci = " << Test::GetI() << "\n";
    
    cout << "Press the enter key to continue ...";
    cin.get();
    return EXIT_SUCCESS;

  5.從命名空間的角度

    a。類的靜態成員只是類這個命名空間中的全局變量和全局函數

    b。不同的是,類可以對靜態成員進行訪問權限的限制,而命名空間不行

  6.從面向對象的角度

    a。類的靜態成員屬於類概念本身

    b。類的所有對象共享相同的靜態成員

四。靜態成員函數的定義

  1.在定義時直接通過 static 關鍵字修飾

  2.其余部分與普通成員函數定義相同

五。靜態成員函數和普通成員函數有什么區別?

  c++類對象中的成員變量和成員函數是分開存儲的

  1.成員變量

    普通成員變量:存儲於對象中,與 struct 變量有相同的內存布局和字節對齊方式

    靜態成員變量:存儲於全局數據區中

  2.成員函數

    存儲於代碼段中

六。

#include <stdio.h>

class Test
{
    int i;
    int j;
    int k;
    
    static int c;
public:
    Test(int i, int j, int k)
    {
        this->i = i;
        this->j = j;
        this->k = k;
    }
    
    void print()
    {
        printf("Object Address: %08X\n", this);
        printf("&c = %08X, c = %d\n", &c, c);
        printf("&i = %08X, i = %d\n", &i, i);
        printf("&j = %08X, j = %d\n", &j, j);
        printf("&k = %08X, k = %d\n", &k, k);
    }
};

int Test::c;

int main()
{
    Test t1(0, 1, 2);
    Test t2(3, 4, 5);
    
    printf("t1 Address: %08X\n", &t1);
    t1.print();
    printf("t2 Address: %08X\n", &t2);
    t2.print();
    
    printf("Press any key to continue...");
    getchar();
    return 0;
}

六。小結

  1.C++類中可以包含屬於類概念的靜態成員

  2.靜態成員變量在全局數據區分配空間

  3.靜態成員函數不包含隱藏的this指針

  4.通過類名可以直接訪問靜態成員


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM