精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

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

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

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

類可以定義static成員,用于解決同一個類的不同對象之間數據和函數共享的問題,用一個類的不同對象的的靜態成員使用同一個內存空間。靜態成員包含靜態數據成員和靜態函數成員。

通常,非static數據成員存在于類類型的每個對象中,但是static數據成員獨立于該類的任意對象而存在,每個static數據成員是與類關聯的對象,并不是與該類的對象關聯。

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

使用靜態成員的優點:

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

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

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

(一)定義static成員

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

static成員函數可以直接定義在聲明的后面,也可以在類的外面定義。當在類外面定義時,不需要static關鍵字。

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

class Student

{

public:

static int getCount();

static int count;

};

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

int Student::count=0;

(二)使用static成員

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

Student::count=0;

int n=Student::getCount();

也可以通過類對象對靜態成員進行訪問:

Student stu1;

stu1.count=0;

Student *s=&syu1;

int n=s->getCount();

當在類的內部使用靜態成員時,可以直接使用,不需要作用域運算符。此外可以使用非static成員的方法來使用static成員。

2.1使用靜態數據成員

#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 使用靜態成員函數

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

靜態成員函數可以在類內定義,也可以在類外定義,在類外定義時不用再加關鍵字static;

系統限定靜態成員函數為內部連接,這樣就不會因為與連接文件中的其他同名成員函數相沖突,保證了靜態成員函數的安全性;

靜態成員函數中沒有隱含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詳細介紹

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C++
    C++
    +關注

    關注

    22

    文章

    2104

    瀏覽量

    73503
  • static
    +關注

    關注

    0

    文章

    33

    瀏覽量

    10356

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

文章出處:【微信號:gh_bee81f890fc1,微信公眾號:面包板社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C++中的結構和

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

    C++課程資料詳細資料合集包括了:面向對象程序設計與C++,算法,函數等

    本文檔的主要內容詳細介紹的是C++課程資料資料合集包括了:面向對象程序設計與C++,算法,函數,概述, C++語言基礎,構造數據類型,數據類
    發表于 07-09 08:00 ?18次下載
    <b class='flag-5'>C++</b>課程資料<b class='flag-5'>詳細</b>資料合集包括了:面向對象程序設計與<b class='flag-5'>C++</b>,算法,函數等

    基于fpgrowth的c++實現詳細資料免費下載

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

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

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

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

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

    C++教程之數據線性結構的詳細資料介紹

    本文檔的主要內容詳細介紹的是C++教程之數據線性結構的詳細資料介紹
    發表于 02-14 16:18 ?1次下載
    <b class='flag-5'>C++</b>教程之數據線性結構的<b class='flag-5'>詳細</b>資料<b class='flag-5'>介紹</b>

    Visual C++教程之C++的基礎知識介紹

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

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

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

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

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

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

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

    C++語言編碼規范詳細說明

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

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

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

    Visual C++介紹和數據類型詳細說明

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

    EE-128:C++中的DSP:從C++調用匯編成員函數

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

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

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