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

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

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

3天內不再提示

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

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

背景

當我們在編寫程序時,經常需要定義一些數據類型,這些數據類型可以封裝數據和函數,以便我們更好地組織和管理代碼。C++中的類就是一種用于定義新的數據類型的機制,它允許我們將數據和函數封裝在一起,形成一個獨立的模塊,這個模塊可以被其他代碼重復使用。

類的定義和聲明

類是一種用戶自定義的數據類型,它可以包含數據成員和成員函數。數據成員是類的屬性,成員函數是類的行為。類定義了一種新的數據類型,我們可以使用這種數據類型來創建對象,每個對象都有自己的數據成員和成員函數,在C++中,我們使用class關鍵字來定義一個類。類的定義包括類名、數據成員和成員函數。下面是一個簡單的類定義的例子:

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

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

構造函數

在C++中,構造函數是一種特殊的成員函數,用于初始化對象的數據成員。構造函數的名稱與類的名稱相同,沒有返回類型,可以有參數。當創建一個對象時,構造函數會自動調用,以初始化對象的數據成員。

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

在上面的示例中,MyClass類有一個帶有一個整數參數的構造函數,用于初始化publicVar數據成員。當創建一個MyClass對象時,可以傳遞一個整數參數來調用構造函數,以初始化publicVar數據成員。

?需要注意的是,如果一個類沒有定義構造函數,則編譯器會自動生成一個默認構造函數。默認構造函數沒有參數,不執行任何操作,只是將對象的數據成員初始化為默認值。

?

如果一個類有多個構造函數,則可以使用函數重載來實現。函數重載是指在同一個作用域內定義多個函數,它們具有相同的名稱但不同的參數列表。當調用一個重載函數時,編譯器會根據傳遞的參數類型和數量來確定要調用哪個函數。

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

在上面的示例中,MyClass類有兩個構造函數,一個是默認構造函數,另一個是帶有一個整數參數的構造函數。當創建一個MyClass對象時,可以選擇調用哪個構造函數來初始化publicVar數據成員。

析構函數

C++中的析構函數(Destructor)是一種特殊的成員函數,它在對象被銷毀時自動調用。它的作用是釋放對象占用的資源,比如堆上的內存、文件句柄、數據庫連接等等。

C++中的析構函數使用一個波浪線(~)作為前綴,后跟類的名稱。它不接受任何參數,也沒有返回值,因為它的主要作用是在對象被銷毀時自動執行。析構函數的名稱與類名稱相同,但前面有一個波浪線符號。

例如,下面是一個簡單的類和它的析構函數的示例:

class MyClass {
public:
    // 構造函數
    MyClass() {
        // 構造函數代碼
    }

    // 析構函數
    ~MyClass() {
        // 析構函數代碼
    }
};

當程序中創建一個MyClass對象時,構造函數將被自動調用以初始化對象。當對象的生命周期結束時,析構函數將自動調用以清理對象所占用的資源。

?需要注意的是,當一個對象被銷毀時,它的析構函數會自動遞歸調用所有成員變量的析構函數,直到所有占用的資源都被釋放為止。如果一個類中有指向堆上分配的內存的指針,需要在析構函數中手動釋放這些內存,以避免內存泄漏。

?

實例化

在C++中,要實例化一個類,你需要創建該類的對象。這可以通過聲明一個類類型的變量,然后使用new關鍵字調用構造函數來完成。例如,如果你有一個名為MyClass的類,你可以按如下方式創建該類的對象:

MyClass* obj = new MyClass();

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

obj->publicVar = 42;

另外,你也可以不使用new關鍵字創建該類的對象。例如:

MyClass obj;

這將在堆棧上創建一個MyClass類的新對象。然后,你可以使用.運算符訪問對象的公共成員。例如:

obj.publicVar = 42;

訪問控制

訪問控制是C++中類的一個重要概念,用于控制成員的訪問權限。C++中的類可以使用public、private和protected關鍵字來控制成員的訪問權限。其中,public成員可以被任何人訪問,private成員只能被類的成員函數訪問,protected成員可以被類的成員函數和派生類的成員函數訪問。

友元函數

在C++中,友元函數是一種特殊的函數,它可以訪問一個類的私有成員和保護成員。友元函數并不是類的成員函數,因此它不能使用成員訪問運算符.或->來訪問類的成員。相反,它必須使用傳遞給它的類對象的引用來訪問類的成員。

友元函數的聲明需要在類的定義中進行,使用friend關鍵字。例如:

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

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

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

在這個例子中,friendFunc可以訪問MyClass的私有成員privateVar,因為它被聲明為MyClass的友元函數。注意,friendFunc使用傳遞給它的MyClass對象的引用來訪問MyClass的成員。

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

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

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

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

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

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

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

int main() {
    MyClass obj;
    friendFunc(obj); // 調用友元函數
    return 0;
}

雖然friendFunc是一個全局友元函數,可以訪問MyClass的私有成員privateVar,但在調用friendFunc時仍然需要使用傳遞給它的MyClass對象的引用來訪問MyClass的成員。

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

    關注

    3

    文章

    4307

    瀏覽量

    62433
  • C++
    C++
    +關注

    關注

    22

    文章

    2104

    瀏覽量

    73498
  • 數據類型
    +關注

    關注

    0

    文章

    236

    瀏覽量

    13609
收藏 人收藏

    評論

    相關推薦

    C++的結構和

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

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

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

    CC++const的用法比較

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

    C++筆記004:C++通俗點說—— C結構體復習

    ”。-----------------------------------------------------C++定義前面看明白了,這個地方就不多說話!將結構體定義
    發表于 03-05 12:53

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

    的公有成員。C++繼承 以下例子:定義了一個基base,定義了一個子類sum,子類繼承了基
    發表于 08-15 09:41

    C++語言基礎講解視頻常量的定義和使用

    C++語言基礎講解視頻常量的定義和使用,喜歡的朋友可以下載來學習。
    發表于 01-14 15:30 ?4次下載

    變量定義和聲明的區別

    我們在程序設計,時時刻刻都用到變量的定義和變量的聲明,可有些時候我們對這個概念不是很清楚,知道它是怎么用,但卻不知是怎么一會事,下面我就簡單的把他們的區別介紹如下:
    發表于 11-17 08:38 ?1w次閱讀

    高質量C++C編程指南資料說明

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

    C語言的聲明定義與引用說明

    本文檔的主要內容詳細介紹的是C語言的聲明定義與引用說明
    發表于 07-29 08:00 ?2次下載
    <b class='flag-5'>C</b>語言的<b class='flag-5'>聲明</b>和<b class='flag-5'>定義</b>與引用說明

    C++的繼承訪問級別學習總結(二)

    上一篇文章我們介紹了c++的繼承學習總結;今天我們繼續來分享c++的繼承
    的頭像 發表于 12-24 16:10 ?717次閱讀

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

    EE-128:C++的DSP:從C++調用匯編成員函數
    發表于 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>調用匯編<b class='flag-5'>類</b>成員函數

    EE-112:模擬C++實現

    EE-112:模擬C++實現
    發表于 05-27 16:13 ?2次下載
    EE-112:模擬<b class='flag-5'>C++</b><b class='flag-5'>中</b>的<b class='flag-5'>類</b>實現

    虛函數,C++開發者如何有效利用

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

    C語言如何定義結構體類型變量

    定義了結構體變量后,系統會為之分配內存單元。根據結構體類型包含的成員情況,在Visual C++占63個字節。 * 這種聲明方式是
    的頭像 發表于 03-10 15:35 ?1193次閱讀

    ostream在c++的用法

    ostream 是 C++ 標準庫中一個非常重要的,它位于 頭文件(實際上,更常見的是通過包含 頭文件來間接包含 ,因為 包含了 和 )。 ostream 及其派生
    的頭像 發表于 09-20 15:11 ?532次閱讀