程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 類靜態成員和靜態成員函數

類靜態成員和靜態成員函數

編輯:關於C語言

static聲明的成員或函數,是由類的所有對象公用,不會在每個類保存一個副本,它屬於類本身的,即使沒有實例化對象,仍可以對其訪問或調用。   /*類靜態成員*/

#include <iostream>
using namespace std;

class A{
  static int a;//聲明靜態成員
  int b;
public:
  void set(int i,int j){a=i;/*修改靜態成員a的值*/b=j;}
  void show();
};

int A::a;//定義部分
void A::show()
{
  cout<<"靜態成員a:"<<a<<endl;
  cout<<"非靜態成員b:"<<b<<endl;
}
int main(int argc,char**argv)
{
  A aa1,aa2;
  aa1.set(11,22);
  aa1.show();
    
  cout<<"++++++++++++++++++++++++"<<endl;
    
  aa2.set(33,44);
  aa2.show();
    
  cout<<"++++++++++++++++++++++++"<<endl;
    
  aa1.show();//任何對靜態成員a的修改都可在其他對象體現出來
    
  return 0;
}   只需在普通的定義方式前加一個關鍵字static,這樣就成了靜態成員。 但是有點需要注意的是其如何初始化,因為它獨立 於類對象,我們不能在構造函數裡初始化,因為在所有對象實例化之前就應該存在(即使沒有調用構造函數,也應該存在).那在什麼位置初始化呢。其實大家想想類成員函數定義的位置就知道了,很像   也是在外部對其再聲明定義,注意沒有static。   int A::a;     下面的聲明為public並初始化了一個值 /*類靜態成員*/

#include <iostream>
using namespace std;

class A{
  int b;
public:
  static int a;//聲明靜態成員
  void set(int i,int j){a=i;/*修改靜態成員a的值*/b=j;}
  void show();
};

int A::a=123;//定義部分
void A::show()
{
  cout<<"靜態成員a:"<<a<<endl;
  cout<<"非靜態成員b:"<<b<<endl;
}
int main(int argc,char**argv)
{
  cout<<A::a<<endl;
  A aa1,aa2;
  aa1.set(11,22);
  aa1.show();
    
  cout<<"++++++++++++++++++++++++"<<endl;
    
  aa2.set(33,44);
  aa2.show();
    
  cout<<"++++++++++++++++++++++++"<<endl;
    
  aa1.show();//任何對靜態成員a的修改都可在其他對象體現出來
    
  cout<<"++++++++++++++++++++++++"<<endl;
    
  A::a=100;//public可以直接訪問
    
  aa1.show();
  return 0;
}
  截圖:  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved