亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

深入解析實現C++ 類的靜態成員

2020-02-24 14:27:47
字體:
來源:轉載
供稿:網友

在C++中,靜態成員不屬于對象,并且只有一個靜態成員變量被存儲以供所有對象共享,當我們使用靜態成員變量實現多個對象之間的數據共享,不會破壞隱藏原則,下文是武林技術頻道小編給大家介紹的深入解析實現C++ 類的靜態成員。

靜態成員的定義或聲明要加個關鍵static。靜態成員可以通過雙冒號來使用即<類名>::<靜態成員名>。

在C++中類的靜態成員變量和靜態成員函數是個容易出錯的地方,本文先通過幾個例子來總結靜態成員變量和成員函數使用規則,再給出一個實例來加深印象。希望閱讀本文可以使讀者對類的靜態成員變量和成員函數有更為深刻的認識。

第一個例子,通過類名調用靜態成員函數和非靜態成員函數

?

class Point
{
public:???
?????? void init()
?????? {?
?????? }
?????? static void output()
?????? {
?????? }
};
void main()
{
?????? Point::init();
?????? Point::output();
}


編譯出錯:error C2352: 'Point::init' : illegal call of non-static member function
結論1:不能通過類名來調用類的非靜態成員函數。
?
第二個例子,通過類的對象調用靜態成員函數和非靜態成員函數
將上例的main()改為:

?

?

?


void main()
{
?????? Point pt;
?????? pt.init();
?????? pt.output();
}


編譯通過。
結論2:類的對象可以使用靜態成員函數和非靜態成員函數。
?
第三個例子,在類的靜態成員函數中使用類的非靜態成員

?

?

?


#include <stdio.h>
class Point
{
public:???
?????? void init()
?????? {?
?????? }
?????? static void output()
?????? {
????????????? printf("%d/n", m_x);
?????? }
private:
?????? int m_x;
};
void main()
{
?????? Point pt;
?????? pt.output();
}


編譯出錯:error C2597: illegal reference to data member 'Point::m_x' in a static member function
因為靜態成員函數屬于整個類,在類實例化對象之前就已經分配空間了,而類的非靜態成員必須在類實例化對象后才有內存空間,所以這個調用就出錯了,就好比沒有聲明一個變量卻提前使用它一樣。
結論3:靜態成員函數中不能引用非靜態成員。
?
第四個例子,在類的非靜態成員函數中使用類的靜態成員

?

?

?


class Point
{
public:???
?????? void init()
?????? {?
????????????? output();
?????? }
?????? static void output()
?????? {
?????? }
};
void main()
{
?????? Point pt;
?????? pt.output();
}


編譯通過。
結論4:類的非靜態成員函數可以調用用靜態成員函數,但反之不能。

第五個例子,使用類的靜態成員變量

?

?

?


#include <stdio.h>
class Point
{
public:???
?????? Point()
?????? {?
????????????? m_nPointCount++;
?????? }
?????? ~Point()
?????? {
????????????? m_nPointCount--;
?????? }
?????? static void output()
?????? {
????????????? printf("%d/n", m_nPointCount);
?????? }
private:
?????? static int m_nPointCount;
};
void main()
{
?????? Point pt;
?????? pt.output();
}


按Ctrl+F7編譯無錯誤,按F7生成EXE程序時報鏈接錯誤
error LNK2001: unresolved external symbol "private: static int Point::m_nPointCount" (?m_nPointCount@Point@@0HA)

?

這是因為類的靜態成員變量在使用前必須先初始化。
在main()函數前加上int Point::m_nPointCount = 0;
再編譯鏈接無錯誤,運行程序將輸出1。
結論5:類的靜態成員變量必須先初始化再使用。
?
結合上面的五個例子,對類的靜態成員變量和成員函數作個總結:
一。靜態成員函數中不能調用非靜態成員。

二。非靜態成員函數中可以調用靜態成員。因為靜態成員屬于類本身,在類的對象產生之前就已經存在了,所以在非靜態成員函數中是可以調用靜態成員的。

三。靜態成員變量使用前必須先初始化(如int MyClass::m_nNumber = 0;),否則會在linker時出錯。

再給一個利用類的靜態成員變量和函數的例子以加深理解,這個例子建立一個學生類,每個學生類的對象將組成一個雙向鏈表,用一個靜態成員變量記錄這個雙向鏈表的表頭,一個靜態成員函數輸出這個雙向鏈表。

?

#include <stdio.h>
#include <string.h>
const int MAX_NAME_SIZE = 30;?

class Student?
{?
public:?
??? Student(char *pszName);
??? ~Student();
public:
?????? static void PrintfAllStudents();
private:?
??? char??? m_name[MAX_NAME_SIZE];?
??? Student *next;
?????? Student *prev;
??? static Student *m_head;
};?

Student::Student(char *pszName)
{?
??? strcpy(this->m_name, pszName);

?????? //建立雙向鏈表,新數據從鏈表頭部插入。
??? this->next = m_head;
?????? this->prev = NULL;
?????? if (m_head != NULL)
????????????? m_head->prev = this;
??? m_head = this;?
}?

Student::~Student ()//析構過程就是節點的脫離過程?
{?
?????? if (this == m_head) //該節點就是頭節點。
?????? {
????????????? m_head = this->next;
?????? }
?????? else
?????? {
????????????? this->prev->next = this->next;
????????????? this->next->prev = this->prev;
?????? }
}?

void Student::PrintfAllStudents()
{
?????? for (Student *p = m_head; p != NULL; p = p->next)
????????????? printf("%s/n", p->m_name);
}

Student* Student::m_head = NULL;?

void main()?
{??
?????? Student studentA("AAA");
?????? Student studentB("BBB");
?????? Student studentC("CCC");
?????? Student studentD("DDD");
?????? Student student("MoreWindows");
?????? Student::PrintfAllStudents();
}


程序將輸出:



以上就是關于深入解析實現C++ 類的靜態成員,如果你還想了解更多C語言的知識,建議你可以時常來關注武林技術頻道!

?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品成人va在线观看| 国产欧美日韩免费看aⅴ视频| 国产精品永久免费视频| 国产91精品黑色丝袜高跟鞋| 成人黄色免费网站在线观看| 成人激情视频小说免费下载| 亚洲黄色有码视频| 国产精品91在线| 91国产视频在线| 欧美亚洲一级片| 亚洲精品v欧美精品v日韩精品| 欧美日在线观看| 韩剧1988免费观看全集| 国产亚洲欧美aaaa| 日韩成人中文字幕在线观看| 一区二区三区四区视频| 久久久久久成人精品| 欧美成人中文字幕| 亚洲女人天堂成人av在线| 日韩免费在线播放| 欧美日韩国产91| 在线视频欧美日韩| 亚洲免费精彩视频| 国产精品综合久久久| 高清欧美一区二区三区| 亚洲欧美综合精品久久成人| 国产一区二区三区视频在线观看| 亚洲新中文字幕| 国产精品入口免费视频一| 欧美日韩国产成人| 亚洲欧洲在线看| 国产精品中文字幕在线| 欧美日韩免费在线观看| 日本欧美一二三区| 亚洲一区二区三区视频播放| www.精品av.com| 国产精品久久久精品| 日韩精品免费电影| 久久久久久有精品国产| 国产精品18久久久久久麻辣| 久久九九有精品国产23| 欧美第一黄色网| 亚洲一区二区久久| 丝袜美腿精品国产二区| 午夜免费在线观看精品视频| 欧美色videos| 韩国福利视频一区| 色综合久久88| 国产精品影片在线观看| 欧美日韩在线视频观看| 欧美二区乱c黑人| 久久精品99久久香蕉国产色戒| 久久精品中文字幕电影| 亚洲国产小视频在线观看| 美女精品视频一区| 亚洲午夜精品视频| 色中色综合影院手机版在线观看| 国产99久久精品一区二区| 久久999免费视频| 亚州欧美日韩中文视频| 欧美性猛交xxxxx免费看| 久久精品国产亚洲| 国产成人综合av| 久久中文久久字幕| 热久久免费视频精品| 中文字幕日韩精品有码视频| 亚洲一区二区国产| 亚洲成人在线视频播放| 成人精品久久一区二区三区| 欧美亚洲视频一区二区| 亚洲影视九九影院在线观看| 午夜精品视频在线| 日韩精品中文字幕久久臀| 成人午夜在线影院| 久久久久久中文字幕| 国产欧美在线观看| 欧美日韩精品在线播放| 亚洲国产另类久久精品| 中文字幕亚洲欧美一区二区三区| 久久精品中文字幕一区| 欧美日韩在线观看视频小说| 日韩美女毛茸茸| 亚洲精品一区在线观看香蕉| 精品久久久中文| 国产热re99久久6国产精品| 国内精品久久久久久久久| 欧美成人性色生活仑片| 国产精品久久久久久久一区探花| 中文字幕不卡av| 久久久99免费视频| 中日韩午夜理伦电影免费| 日本亚洲欧洲色α| 色老头一区二区三区在线观看| 久久九九热免费视频| 欧美午夜性色大片在线观看| 国产精品入口日韩视频大尺度| 国产日韩欧美视频| 亚洲女人被黑人巨大进入| 亚洲视频电影图片偷拍一区| 国产69精品久久久| 日韩视频第一页| 欧美电影在线观看网站| 欧美亚洲一区在线| 欧美日韩一区二区在线播放| 日韩亚洲在线观看| 国产一区二区三区高清在线观看| 成人妇女淫片aaaa视频| 久久久久久国产精品久久| 国产成人精品视频| 久久久久国色av免费观看性色| 亚洲国产91色在线| 国产精品视频网站| 欧洲美女7788成人免费视频| 不卡中文字幕av| 亚洲黄色av女优在线观看| 欧美精品国产精品日韩精品| 精品精品国产国产自在线| 欧美成人精品不卡视频在线观看| 91精品国产91| 国产成人福利夜色影视| 中文字幕v亚洲ⅴv天堂| 欧美在线视频在线播放完整版免费观看| 亚洲欧美激情一区| 日韩激情视频在线播放| 在线视频亚洲欧美| 欧美日韩激情网| 欧美丝袜美女中出在线| 精品久久中文字幕| 91av在线国产| 国产亚洲a∨片在线观看| 日韩激情视频在线播放| 日韩电影大片中文字幕| 午夜美女久久久久爽久久| 国产精品成人免费电影| 久久99久久亚洲国产| 欧美专区在线视频| 亚洲黄色av网站| 国产成人精品亚洲精品| 久99九色视频在线观看| 热久久视久久精品18亚洲精品| 久久国产精品电影| 亚洲精品少妇网址| 亚洲欧美第一页| 欧美日韩免费观看中文| 91成人天堂久久成人| 亚洲日本成人网| 久久久久久久久综合| 日韩一区二区欧美| 2020欧美日韩在线视频| 欧美日韩免费观看中文| 色综合久久久久久中文网| 久久精品亚洲精品| 国产精品欧美日韩一区二区| 欧美激情图片区| 国产精品久久久久久久久久99| 国产精品美女午夜av| 久久精品久久精品亚洲人| 国产精品综合不卡av| 久久九九精品99国产精品| 亚洲深夜福利在线| 亚洲精品在线91| 日韩欧美国产黄色| 欧美黑人性猛交| 亚洲精品久久久久国产|