国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++類中的常數據成員與靜態數據成員之間的區別

2020-01-26 15:44:46
字體:
來源:轉載
供稿:網友

剛開始學習C++的類和對象的部分,對類中的常數據成員和靜態數據成員的概念和用法經常混淆,所以今天整理一下,順便說一下,今天是我的生日,祝我生日快樂,呵呵。

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

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

定義方法:

復制代碼 代碼如下:

const 類型名 變量名;

(1)類中的常數據成員只能通過構造函數的參數初始化表進行初始化。

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

復制代碼 代碼如下:

#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;
}

運行結果:



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

它們最大的區別就是靜態數據成員是可以被修改的,而且可以被任何一個對象修改,修改后的值,可以被所有的對象共享。

靜態數據成員是屬于一個類的而不是某一個對象,它是為該類所定義的所有的對象所共有。該類所定義的對象都可以引用該靜態成員,并且值都是一樣的。

靜態數據成員的存儲空間不同于普通的數據成員,它不屬于類的任何一個對象,是獨立于對象存儲的,因此也不可以通過對象的this指針來訪問。

并且,靜態數據成員不可以用參數初始化表進行初始化操作,原因很簡單,因為初始化表是在定義對象的時候進行的利用了this指針進行操作,所以不可以。

靜態數據成員的定義的方式:

復制代碼 代碼如下:

static int num;

訪問方式:

可以通過類名直接訪問:

復制代碼 代碼如下:

Test::s_num;

也可以通過對象名訪問:
復制代碼 代碼如下:

one.s_num;

不過為了區別于其他的成員變量,一般使用類名進行訪問,因為靜態數據成員不屬于對象,以免使人誤解。
復制代碼 代碼如下:

#include<iostream>
using namespace std;
class Test
{
 public:
  Test(int n):c_num(n){};//只能用初始化表對常數據成員賦初值
  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;//在類體為對靜態數據成員賦初值
int main()
{
 Test one(10);
 one.show();
 one.change(10000);//改變靜態數據成員的值
 cout<<"one changeed:"<<one.s_num<<endl; //使用對象名one間接訪問靜態數據成員
 cout<<"Test changeed:"<<Test::s_num<<endl;//使用類名直接訪問靜態數據成員
 Test two(20);
 cout<<"two changeed:"<<two.s_num<<endl; //使用對象名two間接訪問靜態數據成員
 two.change(99);
 cout<<"Test changeed:"<<Test::s_num<<endl;//使用類名直接訪問靜態數據成員
 return 0;
}

運行結果:

分析: 我們在程序中可以使用類名直接訪問靜態數據成員變量,就直接說明了它不屬于任何一個對象的這個特點。 我們在定義對象two的時候只對c_num進行了賦值,但是我們使用two.s_num進行輸出的時候也是可以輸出的,這也說明了這個數據成員確實可以被所有的對象進行引用,并且值都是相同的,因為它本身就不屬于任何一個對象。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通渭县| 女性| 册亨县| 屏东市| 泾阳县| 宁德市| 阿鲁科尔沁旗| 荣成市| 三穗县| 海晏县| 潜山县| 剑阁县| 寿宁县| 平凉市| 承德县| 策勒县| 苍溪县| 丹江口市| 密云县| 安多县| 莆田市| 镇康县| 河西区| 五大连池市| 勃利县| 眉山市| 饶平县| 噶尔县| 江永县| 曲靖市| 来凤县| 光山县| 福建省| 翁源县| 邢台县| 巴林右旗| 边坝县| 营口市| 黔东| 英超| 射阳县|