static調用方法


1.static類成員

C++primer里面說過,static類成員不像普通的類數據成員,static類數據成員獨立於一切類對象處在。static類數據成員是與類關聯的,

但不與該類定義的對象有任何關系。即static不會像普通類數據成員一樣每一個類對象都有一份,全部類對象是共享一個static類成員的。

例如A類對象修改了static成員為1,那么B對象對應的static類對象成員的值也會是1。

static 成員不占用類對象的空間

#include <iostream>

using namespace std;

class A{
    public:
        A(){} 
        ~A(){} 
    private:
        static int x;  //static int x=1;錯誤 
        
        static void m_data(int a)
        {  x=a;  }     
};

int A::x=1;

int main()
{
    A my_class;
    cout<<sizeof(my_class)<<endl; 
    return 0;
}
View Code

 

注意:static類對象必須要在類外進行初始化

class Text  
{  
    public:  
    static int count;  
};  
  
int Text::count=0;//用static成員變量必須要初始化   
  
int main()  
{  
    Text t1;  
    cout<<t1.count<<endl;   
    return 0;  
}//程序輸出0

static修飾的變量先於對象存在,所以static修飾的變量要在類外初始化。因為static是所有對象共享的變量,必須要比對象先存在。

class Text  
{  
    public:  
    static int count;  
};  
  
int Text::count=0;//用static成員變量必須要初始化   
  
int main()  
{  
    Text t1;  
    Text t2;  
      
    t1.count = 100;     //t1對象把static成員count改為100   
    cout<<t2.count<<endl; //當t2對象打印static成員的時候,顯示的是100而不是0   
    return 0;  
}

2.static類成員函數

 

由於static修飾的類成員屬於類,不屬於對象,因此static類成員函數是沒有this指針的,this指針是指向本對象的指針。正因為沒有this指針,所以static類成員函數

不能訪問非static的類成員,只能訪問 static修飾的類成員。

class Text  
{  
    public:  
    static int fun()  
    {  
        return num;  
    }  
    static int count;  
    int num;  
};  
int Text::count=5;//用static成員變量必須要初始化   
  
int main()  
{  
    Text t1;  
    Text t2;  
    t1.num=100;  
      
    t1.fun();//發生錯誤,fun函數return的是非static類成員 如果return count就正確   
    return 0;  
}

調用方法:

  (1)通過類對象調用
  (2)通過類名調用

#include <iostream> 

using namespace std;
class Account{
    public:
        static double m_rate;    // 聲明:獨立於類的對象之外 
        static void set_rate(const double& x){
              m_rate=x;
        }
    
};

double Account:: m_rate=1.0;    // 設初始化,設初值(定義:獲得內存) 

int main()
{
    Account::set_rate(5.0);      //類名調用 
    cout<<Account::m_rate<<endl;
    Account a;
    a.set_rate(7.0);    // 對象調用靜態成員函數,編譯器將不再會在參數里添加this指針,這個隱含的操作 
    cout<<Account::m_rate<<endl;
    return 0;
}

 

 


免責聲明!

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



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