C++類中的常數(shù)據(jù)成員與靜態(tài)數(shù)據(jù)成員之間的區(qū)別
剛開始學習C++的類和對象的部分,對類中的常數(shù)據(jù)成員和靜態(tài)數(shù)據(jù)成員的概念和用法經(jīng)?;煜越裉煺硪幌?,順便說一下,今天是我的生日,祝我生日快樂,呵呵。
常數(shù)據(jù)成員
常數(shù)據(jù)成員是指在類中定義的不能修改其值的一些數(shù)據(jù)成員,類似于我們以前學過的常變量,雖然是變量,也有自己的地址,但是一經(jīng)賦初值,便不能再被修改。
適用于類中定義一些初始化之后不希望被修改的變量。
定義方法:
const 類型名 變量名;
(1)類中的常數(shù)據(jù)成員只能通過構(gòu)造函數(shù)的參數(shù)初始化表進行初始化。
(2)常數(shù)據(jù)成員是實例化對象的一部分,可以用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;
}
運行結(jié)果:
靜態(tài)數(shù)據(jù)成員
其實常數(shù)據(jù)成員和靜態(tài)數(shù)據(jù)成員完全是兩碼事,只不過一開始學習的時候容易混淆罷了。通過上面的解釋,我們知道常數(shù)據(jù)成員類似常變量,是一種一經(jīng)賦值就不可以改變的變量。
它們最大的區(qū)別就是靜態(tài)數(shù)據(jù)成員是可以被修改的,而且可以被任何一個對象修改,修改后的值,可以被所有的對象共享。
靜態(tài)數(shù)據(jù)成員是屬于一個類的而不是某一個對象,它是為該類所定義的所有的對象所共有。該類所定義的對象都可以引用該靜態(tài)成員,并且值都是一樣的。
靜態(tài)數(shù)據(jù)成員的存儲空間不同于普通的數(shù)據(jù)成員,它不屬于類的任何一個對象,是獨立于對象存儲的,因此也不可以通過對象的this指針來訪問。
并且,靜態(tài)數(shù)據(jù)成員不可以用參數(shù)初始化表進行初始化操作,原因很簡單,因為初始化表是在定義對象的時候進行的利用了this指針進行操作,所以不可以。
靜態(tài)數(shù)據(jù)成員的定義的方式:
static int num;
訪問方式:
可以通過類名直接訪問:
Test::s_num;
也可以通過對象名訪問:
one.s_num;
不過為了區(qū)別于其他的成員變量,一般使用類名進行訪問,因為靜態(tài)數(shù)據(jù)成員不屬于對象,以免使人誤解。
#include<iostream>
using namespace std;
class Test
{
public:
Test(int n):c_num(n){};//只能用初始化表對常數(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;//在類體為對靜態(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; //使用對象名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; //使用對象名two間接訪問靜態(tài)數(shù)據(jù)成員
two.change(99);
cout<<"Test changeed:"<<Test::s_num<<endl;//使用類名直接訪問靜態(tài)數(shù)據(jù)成員
return 0;
}
運行結(jié)果:
分析: 我們在程序中可以使用類名直接訪問靜態(tài)數(shù)據(jù)成員變量,就直接說明了它不屬于任何一個對象的這個特點。 我們在定義對象two的時候只對c_num進行了賦值,但是我們使用two.s_num進行輸出的時候也是可以輸出的,這也說明了這個數(shù)據(jù)成員確實可以被所有的對象進行引用,并且值都是相同的,因為它本身就不屬于任何一個對象。
上一篇:C++中單鏈表的建立與基本操作
欄 目:C語言
下一篇:C++中棧結(jié)構(gòu)建立與操作詳細解析
本文標題:C++類中的常數(shù)據(jù)成員與靜態(tài)數(shù)據(jù)成員之間的區(qū)別
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/3970.html
您可能感興趣的文章
- 04-02c語言沒有round函數(shù) round c語言
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10使用C++實現(xiàn)全排列算法的方法詳解
- 01-10深入Main函數(shù)中的參數(shù)argc,argv的使用詳解
- 01-10c++中inline的用法分析
- 01-10如何尋找數(shù)組中的第二大數(shù)
- 01-10深入理解鏈表的各類操作詳解
- 01-10用C++實現(xiàn)DBSCAN聚類算法
- 01-10全排列算法的非遞歸實現(xiàn)與遞歸實現(xiàn)的方法(C++)
- 01-10C++大數(shù)模板(推薦)


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實例總結(jié)
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11ajax實現(xiàn)頁面的局部加載