吴忠躺衫网络科技有限公司

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

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

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

C++中的類的定義和聲明

jf_78858299 ? 來(lái)源:月下西樓 ? 作者: QStack ? 2023-04-06 14:42 ? 次閱讀

背景

當(dāng)我們?cè)诰帉?xiě)程序時(shí),經(jīng)常需要定義一些數(shù)據(jù)類型,這些數(shù)據(jù)類型可以封裝數(shù)據(jù)和函數(shù),以便我們更好地組織和管理代碼。C++中的類就是一種用于定義新的數(shù)據(jù)類型的機(jī)制,它允許我們將數(shù)據(jù)和函數(shù)封裝在一起,形成一個(gè)獨(dú)立的模塊,這個(gè)模塊可以被其他代碼重復(fù)使用。

類的定義和聲明

類是一種用戶自定義的數(shù)據(jù)類型,它可以包含數(shù)據(jù)成員和成員函數(shù)。數(shù)據(jù)成員是類的屬性,成員函數(shù)是類的行為。類定義了一種新的數(shù)據(jù)類型,我們可以使用這種數(shù)據(jù)類型來(lái)創(chuàng)建對(duì)象,每個(gè)對(duì)象都有自己的數(shù)據(jù)成員和成員函數(shù),在C++中,我們使用class關(guān)鍵字來(lái)定義一個(gè)類。類的定義包括類名、數(shù)據(jù)成員和成員函數(shù)。下面是一個(gè)簡(jiǎn)單的類定義的例子:

class Person {
public:
    // 成員函數(shù)
    void sayHello() {
        std::cout << "Hello, world!" << std::endl;
    }
private:
    // 數(shù)據(jù)成員
    std::string name;
    int age;
};

在這個(gè)例子中,我們定義了一個(gè)名為Person的類,它有一個(gè)公有成員函數(shù)sayHello和兩個(gè)私有數(shù)據(jù)成員name和age。公有成員函數(shù)可以被任何代碼訪問(wèn),而私有數(shù)據(jù)成員只能被類的成員函數(shù)訪問(wèn)。

構(gòu)造函數(shù)

在C++中,構(gòu)造函數(shù)是一種特殊的成員函數(shù),用于初始化對(duì)象的數(shù)據(jù)成員。構(gòu)造函數(shù)的名稱與類的名稱相同,沒(méi)有返回類型,可以有參數(shù)。當(dāng)創(chuàng)建一個(gè)對(duì)象時(shí),構(gòu)造函數(shù)會(huì)自動(dòng)調(diào)用,以初始化對(duì)象的數(shù)據(jù)成員。

class MyClass {
public:
    int publicVar;
    MyClass(int var) {
        publicVar = var;
    }
};

在上面的示例中,MyClass類有一個(gè)帶有一個(gè)整數(shù)參數(shù)的構(gòu)造函數(shù),用于初始化publicVar數(shù)據(jù)成員。當(dāng)創(chuàng)建一個(gè)MyClass對(duì)象時(shí),可以傳遞一個(gè)整數(shù)參數(shù)來(lái)調(diào)用構(gòu)造函數(shù),以初始化publicVar數(shù)據(jù)成員。

?需要注意的是,如果一個(gè)類沒(méi)有定義構(gòu)造函數(shù),則編譯器會(huì)自動(dòng)生成一個(gè)默認(rèn)構(gòu)造函數(shù)。默認(rèn)構(gòu)造函數(shù)沒(méi)有參數(shù),不執(zhí)行任何操作,只是將對(duì)象的數(shù)據(jù)成員初始化為默認(rèn)值。

?

如果一個(gè)類有多個(gè)構(gòu)造函數(shù),則可以使用函數(shù)重載來(lái)實(shí)現(xiàn)。函數(shù)重載是指在同一個(gè)作用域內(nèi)定義多個(gè)函數(shù),它們具有相同的名稱但不同的參數(shù)列表。當(dāng)調(diào)用一個(gè)重載函數(shù)時(shí),編譯器會(huì)根據(jù)傳遞的參數(shù)類型和數(shù)量來(lái)確定要調(diào)用哪個(gè)函數(shù)。

class MyClass {
public:
    int publicVar;
    MyClass() {
        publicVar = 0;
    }
    MyClass(int var) {
        publicVar = var;
    }
};

在上面的示例中,MyClass類有兩個(gè)構(gòu)造函數(shù),一個(gè)是默認(rèn)構(gòu)造函數(shù),另一個(gè)是帶有一個(gè)整數(shù)參數(shù)的構(gòu)造函數(shù)。當(dāng)創(chuàng)建一個(gè)MyClass對(duì)象時(shí),可以選擇調(diào)用哪個(gè)構(gòu)造函數(shù)來(lái)初始化publicVar數(shù)據(jù)成員。

析構(gòu)函數(shù)

C++中的析構(gòu)函數(shù)(Destructor)是一種特殊的成員函數(shù),它在對(duì)象被銷毀時(shí)自動(dòng)調(diào)用。它的作用是釋放對(duì)象占用的資源,比如堆上的內(nèi)存、文件句柄、數(shù)據(jù)庫(kù)連接等等。

C++中的析構(gòu)函數(shù)使用一個(gè)波浪線(~)作為前綴,后跟類的名稱。它不接受任何參數(shù),也沒(méi)有返回值,因?yàn)樗闹饕饔檬窃趯?duì)象被銷毀時(shí)自動(dòng)執(zhí)行。析構(gòu)函數(shù)的名稱與類名稱相同,但前面有一個(gè)波浪線符號(hào)。

例如,下面是一個(gè)簡(jiǎn)單的類和它的析構(gòu)函數(shù)的示例:

class MyClass {
public:
    // 構(gòu)造函數(shù)
    MyClass() {
        // 構(gòu)造函數(shù)代碼
    }

    // 析構(gòu)函數(shù)
    ~MyClass() {
        // 析構(gòu)函數(shù)代碼
    }
};

當(dāng)程序中創(chuàng)建一個(gè)MyClass對(duì)象時(shí),構(gòu)造函數(shù)將被自動(dòng)調(diào)用以初始化對(duì)象。當(dāng)對(duì)象的生命周期結(jié)束時(shí),析構(gòu)函數(shù)將自動(dòng)調(diào)用以清理對(duì)象所占用的資源。

?需要注意的是,當(dāng)一個(gè)對(duì)象被銷毀時(shí),它的析構(gòu)函數(shù)會(huì)自動(dòng)遞歸調(diào)用所有成員變量的析構(gòu)函數(shù),直到所有占用的資源都被釋放為止。如果一個(gè)類中有指向堆上分配的內(nèi)存的指針,需要在析構(gòu)函數(shù)中手動(dòng)釋放這些內(nèi)存,以避免內(nèi)存泄漏。

?

實(shí)例化

在C++中,要實(shí)例化一個(gè)類,你需要?jiǎng)?chuàng)建該類的對(duì)象。這可以通過(guò)聲明一個(gè)類類型的變量,然后使用new關(guān)鍵字調(diào)用構(gòu)造函數(shù)來(lái)完成。例如,如果你有一個(gè)名為MyClass的類,你可以按如下方式創(chuàng)建該類的對(duì)象:

MyClass* obj = new MyClass();

這將創(chuàng)建一個(gè)MyClass類的新對(duì)象,并返回指向該對(duì)象的指針。然后,你可以使用->運(yùn)算符訪問(wèn)對(duì)象的公共成員。例如,如果MyClass有一個(gè)名為publicVar的公共成員,你可以按如下方式訪問(wèn)它:

obj->publicVar = 42;

另外,你也可以不使用new關(guān)鍵字創(chuàng)建該類的對(duì)象。例如:

MyClass obj;

這將在堆棧上創(chuàng)建一個(gè)MyClass類的新對(duì)象。然后,你可以使用.運(yùn)算符訪問(wèn)對(duì)象的公共成員。例如:

obj.publicVar = 42;

訪問(wèn)控制

訪問(wèn)控制是C++中類的一個(gè)重要概念,用于控制成員的訪問(wèn)權(quán)限。C++中的類可以使用public、private和protected關(guān)鍵字來(lái)控制成員的訪問(wèn)權(quán)限。其中,public成員可以被任何人訪問(wèn),private成員只能被類的成員函數(shù)訪問(wèn),protected成員可以被類的成員函數(shù)和派生類的成員函數(shù)訪問(wèn)。

友元函數(shù)

在C++中,友元函數(shù)是一種特殊的函數(shù),它可以訪問(wèn)一個(gè)類的私有成員和保護(hù)成員。友元函數(shù)并不是類的成員函數(shù),因此它不能使用成員訪問(wèn)運(yùn)算符.或->來(lái)訪問(wèn)類的成員。相反,它必須使用傳遞給它的類對(duì)象的引用來(lái)訪問(wèn)類的成員。

友元函數(shù)的聲明需要在類的定義中進(jìn)行,使用friend關(guān)鍵字。例如:

class MyClass {
private:
    int privateVar;
    friend void friendFunc(MyClass& obj); // 聲明友元函數(shù)
};

在這個(gè)例子中,friendFunc是一個(gè)友元函數(shù),可以訪問(wèn)MyClass的私有成員privateVar。注意,友元函數(shù)并不是MyClass的成員函數(shù),因此它不能使用成員訪問(wèn)運(yùn)算符.或->來(lái)訪問(wèn)MyClass的成員。相反,它必須使用傳遞給它的MyClass對(duì)象的引用來(lái)訪問(wèn)MyClass的成員。例如:

void friendFunc(MyClass& obj) {
    obj.privateVar = 42; // 可以訪問(wèn)私有成員
}

在這個(gè)例子中,friendFunc可以訪問(wèn)MyClass的私有成員privateVar,因?yàn)樗宦暶鳛镸yClass的友元函數(shù)。注意,friendFunc使用傳遞給它的MyClass對(duì)象的引用來(lái)訪問(wèn)MyClass的成員。

友元函數(shù)可以是全局函數(shù),也可以是其他類的成員函數(shù)。如果友元函數(shù)是其他類的成員函數(shù),那么這個(gè)類必須先被定義。例如,在以下代碼中,例如:

class MyClass {
private:
    int privateVar;
    friend void friendFunc(MyClass& obj); // 聲明全局友元函數(shù)
    friend class FriendClass; // 聲明其他類的友元類
};

void friendFunc(MyClass& obj) {
    obj.privateVar = 1; // 可以訪問(wèn)MyClass的私有成員
}

class FriendClass {
public:
    void friendFunc(MyClass& obj) {
        obj.privateVar = 2; // 可以訪問(wèn)MyClass的私有成員
    }
};

FriendClass的成員函數(shù)friendFunc被聲明為MyClass的友元函數(shù),因此它可以訪問(wèn)MyClass的私有成員privateVar。注意,這里的聲明需要在FriendClass的定義之后進(jìn)行。此外,需要注意的是,友元函數(shù)的聲明只是告訴編譯器這個(gè)函數(shù)是一個(gè)友元函數(shù),它并不會(huì)影響函數(shù)的調(diào)用方式。因此,在調(diào)用友元函數(shù)時(shí),仍然需要使用傳遞給它的類對(duì)象的引用來(lái)訪問(wèn)類的成員。例如,在以下代碼中:

class MyClass {
private:
    int privateVar;
    friend void friendFunc(MyClass& obj); // 聲明全局友元函數(shù)
};

void friendFunc(MyClass& obj) {
    obj.privateVar = 1; // 可以訪問(wèn)MyClass的私有成員
}

int main() {
    MyClass obj;
    friendFunc(obj); // 調(diào)用友元函數(shù)
    return 0;
}

雖然friendFunc是一個(gè)全局友元函數(shù),可以訪問(wèn)MyClass的私有成員privateVar,但在調(diào)用friendFunc時(shí)仍然需要使用傳遞給它的MyClass對(duì)象的引用來(lái)訪問(wèn)MyClass的成員。

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

    關(guān)注

    3

    文章

    4346

    瀏覽量

    62973
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2114

    瀏覽量

    73857
  • 數(shù)據(jù)類型
    +關(guān)注

    關(guān)注

    0

    文章

    236

    瀏覽量

    13663
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    C++ 有結(jié)構(gòu),就像 C 一樣,因?yàn)樗鼈兪遣灰粯拥摹?b class='flag-5'>C++ 有,它們與結(jié)構(gòu)非常相似。本文解開(kāi)這些語(yǔ)言元素的細(xì)節(jié)。
    發(fā)表于 07-18 17:37 ?840次閱讀

    c++冒號(hào)(:)和雙冒號(hào)(::)的用法

    ()——————————————————————————————————————VC如下::是C++里的“作用域分解運(yùn)算符”。比如聲明了一個(gè)A,
    發(fā)表于 10-18 10:08

    CC++const的用法比較

    const的定義放在頭文件。也就是說(shuō)const在C++是內(nèi)連接的,不會(huì)在多個(gè)編譯單元之間發(fā)生沖突。如果想聲明在別的地方
    發(fā)表于 11-11 10:00

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

    ”。-----------------------------------------------------C++定義前面看明白了,這個(gè)地方就不多說(shuō)話!將結(jié)構(gòu)體定義
    發(fā)表于 03-05 12:53

    C++語(yǔ)言基礎(chǔ)講解視頻常量的定義和使用

    C++語(yǔ)言基礎(chǔ)講解視頻常量的定義和使用,喜歡的朋友可以下載來(lái)學(xué)習(xí)。
    發(fā)表于 01-14 15:30 ?4次下載

    變量定義和聲明的區(qū)別

    我們?cè)诔绦蛟O(shè)計(jì),時(shí)時(shí)刻刻都用到變量的定義和變量的聲明,可有些時(shí)候我們對(duì)這個(gè)概念不是很清楚,知道它是怎么用,但卻不知是怎么一會(huì)事,下面我就簡(jiǎn)單的把他們的區(qū)別介紹如下:
    發(fā)表于 11-17 08:38 ?1w次閱讀

    高質(zhì)量C++C編程指南資料說(shuō)明

    每個(gè) C++/C 程序通常分為兩個(gè)文件。一個(gè)文件用于保存程序的聲明(declaration),稱為頭文件。另一個(gè)文件用于保存程序的實(shí)現(xiàn)(implementation),稱為定義(def
    發(fā)表于 03-14 08:00 ?2次下載

    C語(yǔ)言的聲明定義與引用說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言的聲明定義與引用說(shuō)明
    發(fā)表于 07-29 08:00 ?2次下載
    <b class='flag-5'>C</b>語(yǔ)言的<b class='flag-5'>聲明</b>和<b class='flag-5'>定義</b>與引用說(shuō)明

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

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

    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><b class='flag-5'>中</b>的DSP:從<b class='flag-5'>C++</b>調(diào)用匯編<b class='flag-5'>類</b>成員函數(shù)

    EE-112:模擬C++實(shí)現(xiàn)

    EE-112:模擬C++實(shí)現(xiàn)
    發(fā)表于 05-27 16:13 ?2次下載
    EE-112:模擬<b class='flag-5'>C++</b><b class='flag-5'>中</b>的<b class='flag-5'>類</b>實(shí)現(xiàn)

    虛函數(shù),C++開(kāi)發(fā)者如何有效利用

    虛函數(shù)是基聲明的成員函數(shù),且使用者期望在派生中將其重新定義。那么,在 C++
    的頭像 發(fā)表于 02-11 09:39 ?986次閱讀

    C語(yǔ)言如何定義結(jié)構(gòu)體類型變量

    定義了結(jié)構(gòu)體變量后,系統(tǒng)會(huì)為之分配內(nèi)存單元。根據(jù)結(jié)構(gòu)體類型包含的成員情況,在Visual C++占63個(gè)字節(jié)。 * 這種聲明方式是
    的頭像 發(fā)表于 03-10 15:35 ?1437次閱讀

    ostream在c++的用法

    ostream 是 C++ 標(biāo)準(zhǔn)庫(kù)中一個(gè)非常重要的,它位于 頭文件(實(shí)際上,更常見(jiàn)的是通過(guò)包含 頭文件來(lái)間接包含 ,因?yàn)?包含了 和 )。 ostream 及其派生
    的頭像 發(fā)表于 09-20 15:11 ?942次閱讀

    EE-112:模擬C++實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《EE-112:模擬C++實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 01-03 15:15 ?0次下載
    EE-112:模擬<b class='flag-5'>C++</b><b class='flag-5'>中</b>的<b class='flag-5'>類</b>實(shí)現(xiàn)
    易玩棋牌怎么样| 菲律宾卡卡湾| 百家乐代理每周返佣| 百家乐官网那个平台信誉高| 中华德州扑克协会| 百家乐号游戏机| 百家乐官网微笑打| 百家乐官网庄闲| 易博全讯网| 大发888娱乐场 东南网| 百家乐博娱乐平台赌百家乐| 百家乐官网稳赢秘诀教学| 文化| 现金网开户| 威尼斯人娱乐代理注册| 菲律宾百家乐排行| 尊龙百家乐官网赌场娱乐网规则| 加查县| 晓游棋牌官方下载| 百家乐用品| 职业百家乐的玩法技巧和规则| 百家乐游戏补牌规则| 百家乐官网网站那个诚信好| 百家乐官网视频免费下载| 大地娱乐城| 娱乐城开户送金| 棋牌英雄传| 大发888投注大发娱乐| 百家乐官网电子作弊器| 舒城县| 江源县| 百家乐官网破解版下载| 夏邑县| 湖口县| 西华县| 网上百家乐官网投注法| 网上百家乐官网靠谱吗| 百家乐官网博彩博彩网| 百家乐官网娱乐求指点呀| 太阳城百家乐官网红利| 保单百家乐官网游戏机厂家|