欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++類中的常數(shù)據(jù)成員與靜態(tài)數(shù)據(jù)成員之間的區(qū)別

 更新時(shí)間:2013年10月15日 08:43:51   作者:  
常數(shù)據(jù)成員是指在類中定義的不能修改其值的一些數(shù)據(jù)成員,類似于我們以前學(xué)過的常變量,雖然是變量,也有自己的地址,但是一經(jīng)賦初值,便不能再被修改

剛開始學(xué)習(xí)C++的類和對(duì)象的部分,對(duì)類中的常數(shù)據(jù)成員和靜態(tài)數(shù)據(jù)成員的概念和用法經(jīng)?;煜?,所以今天整理一下,順便說一下,今天是我的生日,祝我生日快樂,呵呵。

常數(shù)據(jù)成員
常數(shù)據(jù)成員是指在類中定義的不能修改其值的一些數(shù)據(jù)成員,類似于我們以前學(xué)過的常變量,雖然是變量,也有自己的地址,但是一經(jīng)賦初值,便不能再被修改。

適用于類中定義一些初始化之后不希望被修改的變量。

定義方法:

復(fù)制代碼 代碼如下:

const 類型名 變量名;

(1)類中的常數(shù)據(jù)成員只能通過構(gòu)造函數(shù)的參數(shù)初始化表進(jìn)行初始化。

(2)常數(shù)據(jù)成員是實(shí)例化對(duì)象的一部分,可以用this指針訪問。

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
class Happy_birthday
{
 public:
   Happy_birthday(char * na):name(na){}
   void Print()
   {
    cout<<name<<" Happy Birthday!"<<endl;
   }
 private:
  const char * name;
};
int main()
{
 Happy_birthday qianshou("趙哲");
 qianshou.Print();
 return 0;
}

運(yùn)行結(jié)果:



靜態(tài)數(shù)據(jù)成員
其實(shí)常數(shù)據(jù)成員和靜態(tài)數(shù)據(jù)成員完全是兩碼事,只不過一開始學(xué)習(xí)的時(shí)候容易混淆罷了。通過上面的解釋,我們知道常數(shù)據(jù)成員類似常變量,是一種一經(jīng)賦值就不可以改變的變量。

它們最大的區(qū)別就是靜態(tài)數(shù)據(jù)成員是可以被修改的,而且可以被任何一個(gè)對(duì)象修改,修改后的值,可以被所有的對(duì)象共享。

靜態(tài)數(shù)據(jù)成員是屬于一個(gè)類的而不是某一個(gè)對(duì)象,它是為該類所定義的所有的對(duì)象所共有。該類所定義的對(duì)象都可以引用該靜態(tài)成員,并且值都是一樣的。

靜態(tài)數(shù)據(jù)成員的存儲(chǔ)空間不同于普通的數(shù)據(jù)成員,它不屬于類的任何一個(gè)對(duì)象,是獨(dú)立于對(duì)象存儲(chǔ)的,因此也不可以通過對(duì)象的this指針來訪問。

并且,靜態(tài)數(shù)據(jù)成員不可以用參數(shù)初始化表進(jìn)行初始化操作,原因很簡單,因?yàn)槌跏蓟硎窃诙x對(duì)象的時(shí)候進(jìn)行的利用了this指針進(jìn)行操作,所以不可以。

靜態(tài)數(shù)據(jù)成員的定義的方式:

復(fù)制代碼 代碼如下:

static int num;

訪問方式:

可以通過類名直接訪問:

復(fù)制代碼 代碼如下:

Test::s_num;

也可以通過對(duì)象名訪問:
復(fù)制代碼 代碼如下:

one.s_num;

不過為了區(qū)別于其他的成員變量,一般使用類名進(jìn)行訪問,因?yàn)殪o態(tài)數(shù)據(jù)成員不屬于對(duì)象,以免使人誤解。
復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
class Test
{
 public:
  Test(int n):c_num(n){};//只能用初始化表對(duì)常數(shù)據(jù)成員賦初值
  void show()
  {
   cout<<"c_num:"<<this->c_num<<endl;
   cout<<"s_num:"<<s_num<<endl;
  }
  void change(int n)
  {
   s_num=n; 
  }
  static int s_num;
 private:
  const  int c_num;
};
int Test::s_num=100;//在類體為對(duì)靜態(tài)數(shù)據(jù)成員賦初值
int main()
{
 Test one(10);
 one.show();
 one.change(10000);//改變靜態(tài)數(shù)據(jù)成員的值
 cout<<"one changeed:"<<one.s_num<<endl; //使用對(duì)象名one間接訪問靜態(tài)數(shù)據(jù)成員
 cout<<"Test changeed:"<<Test::s_num<<endl;//使用類名直接訪問靜態(tài)數(shù)據(jù)成員
 Test two(20);
 cout<<"two changeed:"<<two.s_num<<endl; //使用對(duì)象名two間接訪問靜態(tài)數(shù)據(jù)成員
 two.change(99);
 cout<<"Test changeed:"<<Test::s_num<<endl;//使用類名直接訪問靜態(tài)數(shù)據(jù)成員
 return 0;
}

運(yùn)行結(jié)果:

分析: 我們?cè)诔绦蛑锌梢允褂妙惷苯釉L問靜態(tài)數(shù)據(jù)成員變量,就直接說明了它不屬于任何一個(gè)對(duì)象的這個(gè)特點(diǎn)。 我們?cè)诙x對(duì)象two的時(shí)候只對(duì)c_num進(jìn)行了賦值,但是我們使用two.s_num進(jìn)行輸出的時(shí)候也是可以輸出的,這也說明了這個(gè)數(shù)據(jù)成員確實(shí)可以被所有的對(duì)象進(jìn)行引用,并且值都是相同的,因?yàn)樗旧砭筒粚儆谌魏我粋€(gè)對(duì)象。

相關(guān)文章

最新評(píng)論