0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于C++類的static詳細介紹

NJ90_gh_bee81f8 ? 2018-02-23 08:30 ? 次閱讀

對于某些特定類類型的全體對象而言,訪問一個全局對象有時是有必要的。在程序運行的任意點可能需要統(tǒng)計已創(chuàng)建的特定類類型對象的數(shù)量,但是全局對象會破壞封裝,并且沒有安全保護,一般的用戶代碼就可以修改這個值。

類可以定義static成員,用于解決同一個類的不同對象之間數(shù)據(jù)和函數(shù)共享的問題,用一個類的不同對象的的靜態(tài)成員使用同一個內(nèi)存空間。靜態(tài)成員包含靜態(tài)數(shù)據(jù)成員和靜態(tài)函數(shù)成員。

通常,非static數(shù)據(jù)成員存在于類類型的每個對象中,但是static數(shù)據(jù)成員獨立于該類的任意對象而存在,每個static數(shù)據(jù)成員是與類關(guān)聯(lián)的對象,并不是與該類的對象關(guān)聯(lián)。

靜態(tài)成員函數(shù)沒有this形參,可以直接訪問所屬類的static成員,但是不能直接使用非static成員。

使用靜態(tài)成員的優(yōu)點:

(1)有利于類的封裝,可以把static成員定義為私有成員,防止外部訪問;

(2)static成員是與特定的類關(guān)聯(lián)的,在外部必須使用類名字做前綴,程序更加清晰;

(3)static成員的名字是在類的作用域中,可以避免命名沖突。

(一)定義static成員

static遵循正常的公有、私有訪問限制。每一個要定義為static的成員前面都需要有static,這和訪問限制不同。

static成員函數(shù)可以直接定義在聲明的后面,也可以在類的外面定義。當(dāng)在類外面定義時,不需要static關(guān)鍵字。

在靜態(tài)成員函數(shù)中,不可以使用this指針,因為靜態(tài)成員函數(shù)是同一個類所有對象共有的。同樣靜態(tài)成員函數(shù)中也不可以使用非靜態(tài)的數(shù)據(jù)成員,只可以使用類的靜態(tài)數(shù)據(jù)成員。

class Student

{

public:

static int getCount();

static int count;

};

和普通的數(shù)據(jù)成員不同,static數(shù)據(jù)成員必須在類定義體的外部定義并初始化,定義的時候必須要有類名所前綴。

int Student::count=0;

(二)使用static成員

可以使用作用域運算符“::”從類直間調(diào)用static成員,或者通過對象、引用該類類型對象的指針間接調(diào)用。如可以使用下面的方法訪問靜態(tài)成員。

Student::count=0;

int n=Student::getCount();

也可以通過類對象對靜態(tài)成員進行訪問:

Student stu1;

stu1.count=0;

Student *s=&syu1;

int n=s->getCount();

當(dāng)在類的內(nèi)部使用靜態(tài)成員時,可以直接使用,不需要作用域運算符。此外可以使用非static成員的方法來使用static成員。

2.1使用靜態(tài)數(shù)據(jù)成員

#include

using namespace std;

class Test

{

public:

static int n;

Test(int x)

{

k = x;

n++;

}

void disp()

{

cout << "n= " << n << ", k=" << k << endl;

}

private:

int k;

};

int Test::n = 0;

int main()

{

Test t1(10);

t1.disp();

Test t2(20);

t2.disp();

Test::n++;

t2.disp();

system("pause");

return 0;

}

基于C++類的static詳細介紹

2.2 使用靜態(tài)成員函數(shù)

靜態(tài)成員函數(shù)可以直接引用該類的靜態(tài)數(shù)據(jù)成員和成員函數(shù),但不能引用非靜態(tài)成員。如果要引用非靜態(tài)成員,必須通過參數(shù)傳遞的方式得到對象名,再通過對象名來引用。使用靜態(tài)成員函數(shù)要注意的問題:

靜態(tài)成員函數(shù)可以在類內(nèi)定義,也可以在類外定義,在類外定義時不用再加關(guān)鍵字static;

系統(tǒng)限定靜態(tài)成員函數(shù)為內(nèi)部連接,這樣就不會因為與連接文件中的其他同名成員函數(shù)相沖突,保證了靜態(tài)成員函數(shù)的安全性;

靜態(tài)成員函數(shù)中沒有隱含this指針;

#include

using namespace std;

class Dot

{

static int t;

int a, b;

public:

Dot(int x = 0, int y = 0)

{

a = x;

b = y;

t++;

}

Dot(Dot &d);

int geta()

{

return a;

}

int getb()

{

return b;

}

static void gett()

{

cout << "object id:" << t << endl;

}

};

Dot::Dot(Dot &d)

{

a = d.a;

b = d.b;

t++;

}

int Dot::t = 0;

int main()

{

Dot::gett();

Dot d1(2, 3);

cout << "Dot d1:" << d1.geta() << "," << d1.getb() << endl;

d1.gett();

Dot d2(d1);

cout << "Dot d2:" << d2.geta() << ", " << d2.getb() << endl;

Dot::gett();

system("pause");

return 0;

}

基于C++類的static詳細介紹

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2085

    瀏覽量

    73302
  • static
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    10321

原文標題:C++類的static成員

文章出處:【微信號:gh_bee81f890fc1,微信公眾號:面包板社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    C++中的結(jié)構(gòu)和

    C++ 有結(jié)構(gòu),就像 C 一樣,因為它們是不一樣的。C++,它們與結(jié)構(gòu)非常相似。本文解開這些語言元素的細節(jié)。
    發(fā)表于 07-18 17:37 ?744次閱讀

    C++課程資料詳細資料合集包括了:面向?qū)ο蟪绦蛟O(shè)計與C++,算法,函數(shù)等

    本文檔的主要內(nèi)容詳細介紹的是C++課程資料資料合集包括了:面向?qū)ο蟪绦蛟O(shè)計與C++,算法,函數(shù),概述, C++語言基礎(chǔ),構(gòu)造數(shù)據(jù)類型,數(shù)據(jù)類
    發(fā)表于 07-09 08:00 ?18次下載
    <b class='flag-5'>C++</b>課程資料<b class='flag-5'>詳細</b>資料合集包括了:面向?qū)ο蟪绦蛟O(shè)計與<b class='flag-5'>C++</b>,算法,函數(shù)等

    基于fpgrowth的c++實現(xiàn)詳細資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是基于fpgrowth的c++實現(xiàn)詳細資料免費下載
    發(fā)表于 08-02 08:00 ?1次下載

    VISUAL C++教程之VISUAL C++的安裝和使用方法

    本文檔的主要內(nèi)容詳細介紹的是VISUAL C++教程之VISUAL C++的安裝和使用方法資料免費下載。
    發(fā)表于 12-27 16:32 ?19次下載
    VISUAL <b class='flag-5'>C++</b>教程之VISUAL <b class='flag-5'>C++</b>的安裝和使用方法

    C++的cast最完整最詳細的解釋資料說明

    本文檔的主要內(nèi)容詳細介紹的是C++的cast最完整最詳細的解釋資料說明。
    發(fā)表于 01-29 15:26 ?0次下載
    <b class='flag-5'>C++</b>的cast最完整最<b class='flag-5'>詳細</b>的解釋資料說明

    C++教程之?dāng)?shù)據(jù)線性結(jié)構(gòu)的詳細資料介紹

    本文檔的主要內(nèi)容詳細介紹的是C++教程之?dāng)?shù)據(jù)線性結(jié)構(gòu)的詳細資料介紹。
    發(fā)表于 02-14 16:18 ?1次下載
    <b class='flag-5'>C++</b>教程之?dāng)?shù)據(jù)線性結(jié)構(gòu)的<b class='flag-5'>詳細</b>資料<b class='flag-5'>介紹</b>

    Visual C++教程之C++的基礎(chǔ)知識介紹

    本文檔的主要內(nèi)容詳細介紹的是Visual C++教程之C++的基礎(chǔ)知識介紹主要內(nèi)容包括了:1
    發(fā)表于 02-15 15:59 ?9次下載
    Visual <b class='flag-5'>C++</b>教程之<b class='flag-5'>C++</b>的基礎(chǔ)知識<b class='flag-5'>介紹</b>

    C++程序設(shè)計教程之類的詳細資料說明

    本文檔的詳細介紹的是C++程序設(shè)計教程之類的詳細資料說明主要內(nèi)容包括了:1. 從結(jié)構(gòu)到( From Structure to Class
    發(fā)表于 02-22 09:44 ?2次下載
    <b class='flag-5'>C++</b>程序設(shè)計教程之類的<b class='flag-5'>詳細</b>資料說明

    C++程序設(shè)計教程之C++工具的詳細資料說明

    本文檔的詳細介紹的是C++程序設(shè)計教程之C++工具的詳細資料說明主要內(nèi)容包括了:1. 異常處理,2. 命名空間,3. 使用早期的函數(shù)庫
    發(fā)表于 03-14 16:39 ?4次下載
    <b class='flag-5'>C++</b>程序設(shè)計教程之<b class='flag-5'>C++</b>工具的<b class='flag-5'>詳細</b>資料說明

    C++串口程序第三方代碼免費下載

    本文檔的主要內(nèi)容詳細介紹的是C++串口程序第三方代碼免費下載。
    發(fā)表于 09-11 08:00 ?6次下載
    <b class='flag-5'>C++</b>串口程序第三方<b class='flag-5'>類</b>代碼免費下載

    C++語言編碼規(guī)范詳細說明

    本文檔的主要內(nèi)容詳細介紹的是C++語言編碼規(guī)范詳細說明。
    發(fā)表于 01-07 16:19 ?14次下載
    <b class='flag-5'>C++</b>語言編碼規(guī)范<b class='flag-5'>詳細</b>說明

    C語言和C++的特點與用法詳細說明

    本文檔的主要內(nèi)容詳細介紹的是C語言和C++的特點與用法詳細說明。
    的頭像 發(fā)表于 12-26 10:58 ?4240次閱讀

    Visual C++介紹和數(shù)據(jù)類型詳細說明

    Visual C++介紹和數(shù)據(jù)類型詳細說明介紹
    發(fā)表于 03-29 15:32 ?17次下載

    EE-128:C++中的DSP:從C++調(diào)用匯編成員函數(shù)

    EE-128:C++中的DSP:從C++調(diào)用匯編成員函數(shù)
    發(fā)表于 04-16 17:04 ?2次下載
    EE-128:<b class='flag-5'>C++</b>中的DSP:從<b class='flag-5'>C++</b>調(diào)用匯編<b class='flag-5'>類</b>成員函數(shù)

    C++的輸入流和輸出流介紹

    C++的輸入流和輸出流是C++標準庫中的兩個重要的流,分別用于輸入和輸出數(shù)據(jù)。在本篇博客中,我們將詳細介紹
    的頭像 發(fā)表于 04-30 17:58 ?1875次閱讀