在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

講一點(diǎn)Python類成員和C++類成員的構(gòu)造區(qū)別

冬至子 ? 來(lái)源:鳴鳴鑼的小屋 ? 作者:Maxwell Luo ? 2023-07-21 17:40 ? 次閱讀

>>> 背景

如果同時(shí)寫兩種類型語(yǔ)言的代碼,難免有的時(shí)候會(huì)產(chǎn)生一點(diǎn)混淆,這也正是思維碰撞的時(shí)候。今天來(lái)講一點(diǎn)Python類成員和C++類成員的構(gòu)造區(qū)別。在C++里面,就要求把類成員顯式地聲明出來(lái),這樣才能夠在構(gòu)造函數(shù)里面對(duì)成員進(jìn)行初始化,就如下所示。

class A
{
public:
    int n_;
    A(int n) : n_(n){}
};

如果使用python定義類的話,類成員的定義和初始化都放在了構(gòu)造函數(shù)里面,少了那么一點(diǎn)儀式感,就如下面所示。

class Dog:
    def __init__(self, m):
        self.m_ = m

這個(gè)時(shí)候如果硬是要為python類先聲明一個(gè)成員,從語(yǔ)法上也是可以的,如下所示。

class Dog:
    n_ = 0
    def __init__(self, n):
        self.n_ = n

這就引出了今天的問題,在python中像 n_ = **0 **這樣的語(yǔ)句,到底是什么含義呢?

>>> 解釋

其實(shí)在上述代碼中,為classDog創(chuàng)造了一個(gè)類靜態(tài)成員,該靜態(tài)成員為類所有的數(shù)據(jù)。而 self .m_ = m 才是為類的實(shí)例所有的數(shù)據(jù)。通過類靜態(tài)成員,可以管理一些實(shí)例無(wú)關(guān)的數(shù)據(jù),比如某個(gè)數(shù)學(xué)類中的圓周率、已經(jīng)創(chuàng)建的實(shí)例的個(gè)數(shù)等等。

如下面就通過 count** *** 這個(gè)類靜態(tài)成員,統(tǒng)計(jì)了實(shí)例化的次數(shù);注意這里使用了 Dog.count*** ** 來(lái)訪問類靜態(tài)成員,而不是 self.count**_**。


class Dog:
    count_ = 0
    def __init__(self, n):
        self.n_ = n
        Dog.count_ += 1


if __name__ == '__main__':
    for i in range(3):
        g = Dog(2 * i)
        print(Dog.count_, " n: ", g.n_)
>>
1  n:  0
2  n:  2
3  n:  4

相比而言,C++創(chuàng)建類靜態(tài)成員的方法如下所示。使用關(guān)鍵字 static 來(lái)聲明一個(gè)靜態(tài)成員。對(duì)于非const類型的類靜態(tài)成員,C++還要求在類外部進(jìn)行初始化,如int Dog::count = 0 ; 。

注意下面這種統(tǒng)計(jì)構(gòu)造次數(shù)的方法僅僅是統(tǒng)計(jì)了普通構(gòu)造,并沒有統(tǒng)計(jì)默認(rèn)構(gòu)造、拷貝構(gòu)造或者賦值構(gòu)造。通過析構(gòu)函數(shù)可以看到,隨著對(duì)象的過期,對(duì)象的個(gè)數(shù)也逐漸減少到歸0了。

class Dog
{
public:
    static int count;
    int n_;
    Dog(int n): n_(n) { count++; }
    ~Dog() { count--; }
};


int Dog::count = 0;


int main()
{
    {
        Dog g1(0);
        cout < < Dog::count < < " n: " < < g1.n_ < < endl;
        Dog g2(2);
        cout < < Dog::count < < " n: " < < g2.n_ < < endl;
        Dog g3(4);
        cout < < Dog::count < < " n: " < < g3.n_ < < endl;
    }
    cout < < Dog::count < < endl;
}
>>
1 n: 0
2 n: 2
3 n: 4
0
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C++語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    147

    瀏覽量

    7044
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4811

    瀏覽量

    85098
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    強(qiáng)大的matlab:在中實(shí)現(xiàn)static成員變量 (轉(zhuǎn)帖)

    不需要使用MATLAB的定義了。可是如果應(yīng)用MATLAB開發(fā)具有工程應(yīng)用型的程序,使用面向?qū)ο缶幊虝?huì)具有不可比擬的優(yōu)勢(shì)。懂C++的朋友應(yīng)該都知道,C++個(gè)static
    發(fā)表于 03-07 10:42

    C++筆記004:C++通俗點(diǎn)說—— C結(jié)構(gòu)體復(fù)習(xí)

    ` 本帖最后由 tyyhmtyyhm 于 2018-5-12 09:37 編輯 C++通俗點(diǎn)說—— C結(jié)構(gòu)體復(fù)習(xí)核心:C++
    發(fā)表于 03-05 12:53

    vc的常用成員函數(shù)

    CRect:用來(lái)表示矩形的,擁有四個(gè)成員變量:top left bottom right。分別表是左上角和右下角的坐標(biāo)。可以通過以下的方法構(gòu)造
    發(fā)表于 08-02 06:33

    【微信精選】C++的精髓和繼承就該這么理解!

    中的公有成員C++繼承 以下例子:定義了個(gè)基base,定義了個(gè)子類sum,子類繼承了基
    發(fā)表于 08-15 09:41

    如何把C++的源程序改寫成C語(yǔ)言

    無(wú)所知對(duì)大家有好處,只是想說這種方法的與程序邏輯本身的無(wú)關(guān)性。下面對(duì)C++些特性,以及如何在c里實(shí)現(xiàn)或者替代,作些初步的探討:說明
    發(fā)表于 07-08 20:51

    如何把C++的源程序改寫成C語(yǔ)言

    無(wú)所知對(duì)大家有好處,只是想說這種方法的與程序邏輯本身的無(wú)關(guān)性。下面對(duì)C++些特性,以及如何在c里實(shí)現(xiàn)或者替代,作些初步的探討:說明
    發(fā)表于 07-11 09:34

    如何把C++的源程序改寫成C語(yǔ)言

    所要實(shí)現(xiàn)的功能還無(wú)所知。倒不是說無(wú)所知對(duì)大家有好處,只是想說這種方法的與程序邏輯本身的無(wú)關(guān)性。下面對(duì)C++些特性,以及如何在c里實(shí)現(xiàn)
    發(fā)表于 06-30 10:54

    如何把C++的源程序改寫成C語(yǔ)言

    方法的與程序邏輯本身的無(wú)關(guān)性。下面對(duì)C++些特性,以及如何在c里實(shí)現(xiàn)或者替代,作些初步的探討:說明:函數(shù)Ixx為xx的
    發(fā)表于 07-05 14:59

    如何把C++的源程序改寫成C語(yǔ)言

    無(wú)所知對(duì)大家有好處,只是想說這種方法的與程序邏輯本身的無(wú)關(guān)性。下面對(duì)C++些特性,以及如何在c里實(shí)現(xiàn)或者替代,作些初步的探討:說明
    發(fā)表于 07-07 09:31

    如何把C++的源程序改寫成C語(yǔ)言

    無(wú)所知對(duì)大家有好處,只是想說這種方法的與程序邏輯本身的無(wú)關(guān)性。下面對(duì)C++些特性,以及如何在c里實(shí)現(xiàn)或者替代,作些初步的探討:說明
    發(fā)表于 11-17 10:16

    成員函數(shù)與普通函數(shù)的區(qū)別研究

    本文的目的是研究成員函數(shù)與普通函數(shù)之區(qū)別,以及不同調(diào)用方式之間的區(qū)別,進(jìn)而通過內(nèi)聯(lián)匯編語(yǔ)句模仿特定的調(diào)用,從而完成通過普通函數(shù)指針調(diào)用
    發(fā)表于 09-15 14:52 ?32次下載

    C++的繼承訪問級(jí)別學(xué)習(xí)總結(jié)(二)

    篇文章我們介紹了c++的繼承學(xué)習(xí)總結(jié);今天我們繼續(xù)來(lái)分享c++的繼承中的訪問級(jí)別的學(xué)習(xí)總結(jié)。
    的頭像 發(fā)表于 12-24 16:10 ?797次閱讀

    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><b class='flag-5'>成員</b>函數(shù)

    的申明和成員函數(shù)定義分離是什么

    前面我們學(xué)習(xí)了如何定義,以及如何使用成員,在前面我們把成員函數(shù)都定義在了的內(nèi)部,接下來(lái)我們學(xué)習(xí),如何把
    的頭像 發(fā)表于 02-27 15:33 ?1008次閱讀

    探索C++的編程習(xí)慣與編程要點(diǎn)

    C++可以分為帶指針數(shù)據(jù)成員與不帶指針數(shù)據(jù)成員,complex就屬于不帶指針成員
    的頭像 發(fā)表于 11-14 09:25 ?461次閱讀
    探索<b class='flag-5'>C++</b>的編程習(xí)慣與編程要點(diǎn)
    主站蜘蛛池模板: 男女爱爱爽爽福利免费视频 | 黄网站在线观看高清免费 | 人人爱人人爽 | 欧美猛操| 日韩免费一区 | 日韩精品视频免费在线观看 | 免费黄色的视频 | 四虎欧美在线观看免费 | 午夜免费体验 | 欧美深夜福利 | 久久久久女人精品毛片 | 欧美人与zoxxxx另类9 | 亚洲a免费| 国模精品视频一区二区三区 | 老师您的兔子好软水好多动漫视频 | 天天操夜夜艹 | 乱j伦小说在线阅读 | 激情综合丁香 | 免费在线你懂的 | 久热精品视频 | 狠狠色综合久久久久尤物 | 女人被两根一起进3p在线观看 | 午夜激情网站 | 日韩三级毛片 | 欧美jizzhd精品欧美4k | 啪啪网站免费看 | 男人日女人视频免费看 | 欧美系列在线播放 | 天天做天天爱天天做天天吃中 | 亚洲va欧美va国产综合久久 | 午夜影院免费在线观看 | 天天操一操 | 精品国产免费一区二区 | 在线成人免费 | 五月婷亚洲 | 丁香花在线视频观看免费 | 一区二区午夜 | 性做久久久久久久久 | 啪啪黄色片| 久草资源网 | 免费一级毛片在线播放 |