最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++類和對象之相關(guān)特性解讀

 更新時間:2025年05月22日 10:24:47   作者:zzh_zao  
這篇文章主要介紹了C++類和對象之相關(guān)特性,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一.類型轉(zhuǎn)換

在C++中,類類型轉(zhuǎn)換是指將一個類的對象轉(zhuǎn)換為另一個類的對象,或者將一個類的對象轉(zhuǎn)換為基本數(shù)據(jù)類型等。

C++提供了多種類型的轉(zhuǎn)換機制,包括隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換。

以下是關(guān)于C++類類型轉(zhuǎn)換的詳細介紹:

隱式類型轉(zhuǎn)換

?構(gòu)造函數(shù)實現(xiàn)的隱式轉(zhuǎn)換

如果一個類的構(gòu)造函數(shù)只有一個參數(shù)(除了可能的默認參數(shù)外),那么這個構(gòu)造函數(shù)可以被用作隱式類型轉(zhuǎn)換。例如:

class B {<!--{C}%3C!%2D%2D%20%2D%2D%3E-->
public:
    B(int x) {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> /* ... */ }
};

這時,可以將int類型的值隱式轉(zhuǎn)換為B類型的對象:

B b = 5; // 通過B的構(gòu)造函數(shù)將5隱式轉(zhuǎn)換為B對象

在類類型有多個參數(shù)時,可以使用{ xxx ,xxx },的形式來進行轉(zhuǎn)換,不能使用(),因為()會計算出括號內(nèi)最后一個表達式的值

類型轉(zhuǎn)換運算符實現(xiàn)的隱式轉(zhuǎn)換

類可以定義類型轉(zhuǎn)換運算符,將類的對象隱式轉(zhuǎn)換為其他類型。例如:

class A {<!--{C}%3C!%2D%2D%20%2D%2D%3E-->
public:
    operator int() const {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> return 10; }
};

這時,A類型的對象可以隱式轉(zhuǎn)換為int類型:

A a;
int x = a; // 通過A的類型轉(zhuǎn)換運算符將a隱式轉(zhuǎn)換為int

這種隱式轉(zhuǎn)換可能會導致一些意外的錯誤,因此可以通過在構(gòu)造函數(shù)前加上explicit關(guān)鍵字來禁止這種隱式轉(zhuǎn)換:

class B {<!--{C}%3C!%2D%2D%20%2D%2D%3E-->
public:
    explicit B(int x) {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> /* ... */ }
};

這樣,B b = 5;就會報錯,而必須顯式地調(diào)用構(gòu)造函數(shù):B b(5);。

類類型的對象之間也可以隱式轉(zhuǎn)換,需要相應的構(gòu)造函數(shù)?持

二.static成員

在C++中,static成員是類的一個重要特性,它與類本身相關(guān)聯(lián),而不是與類的某個具體對象相關(guān)聯(lián)。這意味著static成員在類的所有對象之間是共享的。以下是對static成員的詳細介紹:

static成員變量

定義與初始化

static成員變量是類的所有對象共享的變量。它在類的定義中聲明,但需要在類的定義外進行初始化。 ?static修飾的成員變量,稱之為靜態(tài)成員變量,靜態(tài)成員變量?定要在類外進?初始化。例如:

class MyClass {<!--{C}%3C!%2D%2D%20%2D%2D%3E-->
public:
    static int count; // 聲明static成員變量
};

int MyClass::count = 0; // 初始化static成員變量

注意,static成員變量的初始化必須在類的定義外進行,且只能初始化一次。

訪問方式

static成員變量可以通過類名或類的對象來訪問,但推薦使用類名訪問,以體現(xiàn)其與類的關(guān)系。例如:

MyClass::count = 10; // 通過類名訪問
MyClass obj;
obj.count = 20; // 通過對象訪問(不推薦,但合法)

無論通過類名還是對象訪問,static成員變量都是同一個變量。

生命周期

static成員變量的生命周期從程序開始運行時初始化,到程序結(jié)束時銷毀。它不依賴于類的對象的生命周期。

靜態(tài)成員變量不能在聲明位置給缺省值初始化,因為缺省值是個構(gòu)造函數(shù)初始化列表的,靜態(tài)成員變量不屬于某個對象,不?構(gòu)造函數(shù)初始化列表.

static成員函數(shù)

定義與調(diào)用

static成員函數(shù)是與類相關(guān)聯(lián)的函數(shù),而不是與類的某個具體對象相關(guān)聯(lián)。它不能訪問非static成員變量和非static成員函數(shù),因為這些成員需要對象的上下文。例如:

class MyClass {<!--{C}%3C!%2D%2D%20%2D%2D%3E-->
public:
    static void print() {<!--{C}%3C!%2D%2D%20%2D%2D%3E-->
        std::cout &lt;&lt; "Static function" &lt;&lt; std::endl;
    }
};
點擊并拖拽以移動

static成員函數(shù)可以通過類名或類的對象來調(diào)用,但推薦使用類名調(diào)用。例如:

MyClass::print(); // 通過類名調(diào)用
MyClass obj;
obj.print(); // 通過對象調(diào)用(不推薦,但合法)

特點?

  • static成員函數(shù)沒有this指針,因為它不依賴于具體的對象。
  • 它可以訪問類的static成員變量和其他static成員函數(shù)。
  • 靜態(tài)成員也是類的成員,受public、protected、private訪問限定符的限制。

應用場景

  • 常用于實現(xiàn)與類相關(guān)的工具函數(shù),這些函數(shù)不需要訪問類的對象的成員變量。
  • 例如,實現(xiàn)一個全局的計數(shù)器:
class MyClass {
public:
    static void incrementCount() { count++; }
    static int getCount() { return count; }
private:
    static int count;
};

int MyClass::count = 0;

int main() {
    MyClass::incrementCount();
    std::cout << MyClass::getCount() << std::endl; // 輸出1
    return 0;
}

static成員的存儲位置

  • static成員變量和static成員函數(shù)的存儲位置通常在程序的全局數(shù)據(jù)區(qū)。它們在程序啟動時分配內(nèi)存,在程序結(jié)束時釋放內(nèi)存。
  • 與全局變量類似,static成員變量在全局數(shù)據(jù)區(qū)中有一個固定的地址,所有對象共享這個地址。
  • 靜態(tài)成員變量為所有類對象所共享,不屬于某個具體的對象,不存在對象中,存放在靜態(tài)區(qū)。

心得:

  • static成員變量和static成員函數(shù)是類的靜態(tài)特性,它們與類本身相關(guān)聯(lián),而不是與類的對象相關(guān)聯(lián)。
  • static成員變量需要在類的定義外初始化,并且可以通過類名或?qū)ο笤L問。
  • static修飾的成員函數(shù),稱之為靜態(tài)成員函數(shù) static成員函數(shù)沒有this指針,只能訪問類的static成員變量和其他static成員函數(shù)。
  • 靜態(tài)的成員函數(shù),可以訪問任意的靜態(tài)成員變量和靜態(tài)成員函數(shù)。
  • 靜態(tài)成員函數(shù)中可以訪問其他的靜態(tài)成員,但是不能訪問?靜態(tài)的,因為沒有this指針。
  • 突破類域就可以訪問靜態(tài)成員,可以通過類名::靜態(tài)成員或者對象.靜態(tài)成員 來訪問靜態(tài)成員變量和靜態(tài)成員函數(shù)。

三.友元

在C++中,友元(Friend) 是一個非常重要的概念,它允許某些特定的函數(shù)或類訪問另一個類的私有(private)和保護(protected)成員。

這在某些情況下非常有用,尤其是當你需要在類的封裝性與功能需求之間找到平衡時。

友元函數(shù)

定義

  • 友元函數(shù)不是類的成員函數(shù),但它可以訪問類的私有和保護成員。
  • 友元函數(shù)需要在類的定義中使用friend關(guān)鍵字聲明。

特點

  • 友元函數(shù)不是類的成員函數(shù),因此它沒有this指針。
  • 友元函數(shù)的定義可以位于類的定義內(nèi)或定義外,但聲明必須在類的定義中。
  • 友元函數(shù)可以訪問類的所有成員(包括私有和保護成員)。
  • ?個函數(shù)可以是多個類的友元函數(shù)。

友元類

定義

  • 友元類是一個類,它的所有成員函數(shù)都可以訪問另一個類的私有和保護成員。
  • 友元類需要在類的定義中使用friend關(guān)鍵字聲明。例如:
class MyClass {
private:
    int privateData;

public:
    MyClass(int data) : privateData(data) {}
    friend class FriendClass; // 聲明友元類
};

class FriendClass {
public:
    void printPrivateData(const MyClass& obj) {
        std::cout << "Private Data: " << obj.privateData << std::endl;
    }
};

在這個例子中,FriendClassMyClass的友元類,因此FriendClass的所有成員函數(shù)都可以訪問MyClass的私有成員privateData。

特點

  • 友元類的所有成員函數(shù)都可以訪問被友元類聲明的類的私有和保護成員。
  • 友元類的聲明方式與友元函數(shù)類似,但聲明的是整個類。

友元成員函數(shù)

定義

  • 友元成員函數(shù)是另一個類的成員函數(shù),但它可以訪問當前類的私有和保護成員。友元成員函數(shù)需要在類的定義中使用friend關(guān)鍵字聲明,并指定所屬類和函數(shù)名。

特點

  • 友元成員函數(shù)是另一個類的成員函數(shù),但它可以訪問當前類的私有和保護成員。
  • 友元成員函數(shù)的聲明需要指定所屬類和函數(shù)名。
  • 元類中的成員函數(shù)都可以是另?個類的友元函數(shù),都可以訪問另?個類中的私有和保護成員。
  • 友元類的關(guān)系是單向的,不具有交換性,?如A類是B類的友元,但是B類不是A類的友元。
  • 友元類關(guān)系不能傳遞,如果A是B的友元,B是C的友元,但是A不是C的友元。

小結(jié):

  • 友元函數(shù):允許特定的非成員函數(shù)訪問類的私有和保護成員。
  • 友元類:允許另一個類的所有成員函數(shù)訪問當前類的私有和保護成員。
  • 友元成員函數(shù):允許另一個類的特定成員函數(shù)訪問當前類的私有和保護成員。
  • 使用注意事項:謹慎使用友元,盡量減少對類的內(nèi)部結(jié)構(gòu)的暴露,避免破壞封裝性。友元破壞了類的封裝性,因為它允許外部函數(shù)或類訪問類的私有和保護成員。因此,應該謹慎使用友元,只在必要時才使用。

四.內(nèi)部類

如果?個類定義在另?個類的內(nèi)部,這個內(nèi)部類就叫做內(nèi)部類。內(nèi)部類是?個獨?的類,跟定義在全局相?,他只是受外部類類域限制和訪問限定符限制,所以外部類定義的對象中不包含內(nèi)部類。

內(nèi)部類默認是外部類的友元類。

內(nèi)部類本質(zhì)也是?種封裝,當A類跟B類緊密關(guān)聯(lián),A類實現(xiàn)出來主要就是給B類使?,那么可以考慮把A類設計為B的內(nèi)部類,如果放到private/protected位置,那么A類就是B類的專屬內(nèi)部類,其他地?都?不了。

內(nèi)部類和外部類為平行關(guān)系,計算大小時不算內(nèi)部類,內(nèi)部類不算外部類的一部分,收訪問限定符的限制

五.匿名對象

通常情況下,我們定義的是有名對象。

在C++中,匿名對象是指沒有顯式命名的對象。它們通常在需要臨時使用某個類的對象時被創(chuàng)建,使用完畢后立即銷毀。

匿名對象?命周期只在當前??,?般臨時定義?個對象當前??下即可。

六.new

當使用動態(tài)內(nèi)存分配(new)創(chuàng)建數(shù)組時,構(gòu)造函數(shù)的調(diào)用機制與靜態(tài)數(shù)組是相同的,但有一些額外的注意事項。

動態(tài)數(shù)組的構(gòu)造函數(shù)調(diào)用
Sum* arr = new Sum[n];  // 動態(tài)創(chuàng)建長度為n的Sum數(shù)組

這行代碼會:

  1. 在堆上分配足夠存儲n個Sum對象的內(nèi)存
  2. 逐個調(diào)用每個元素的默認構(gòu)造函數(shù)
  3. 返回指向第一個元素的指針
  4. 與靜態(tài)數(shù)組一樣,構(gòu)造函數(shù)會被調(diào)用n次

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于C++11中限定作用域的枚舉類型的問題

    關(guān)于C++11中限定作用域的枚舉類型的問題

    C++中有兩種類型的枚舉:不限定作用域的枚舉類型和限定作用域的枚舉類型。限定作用域的枚舉類型是C++11標準引入的新類型,對C++11中限定作用域的枚舉類型相關(guān)知識感興趣的朋友一起看看吧
    2022-01-01
  • Qt結(jié)合libqrencode生成二維碼的實現(xiàn)示例

    Qt結(jié)合libqrencode生成二維碼的實現(xiàn)示例

    本文主要介紹了Qt結(jié)合libqrencode生成二維碼的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言小程序 數(shù)組操作示例代碼

    C語言小程序 數(shù)組操作示例代碼

    對數(shù)組進行操作,查找、插入、刪除
    2013-07-07
  • C++計算任意權(quán)值的單源最短路徑(Bellman-Ford)

    C++計算任意權(quán)值的單源最短路徑(Bellman-Ford)

    這篇文章主要為大家詳細介紹了C++計算任意權(quán)值的單源最短路徑,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 在C++中定義和使用宏常量解讀

    在C++中定義和使用宏常量解讀

    這篇文章主要介紹了在C++中定義和使用宏常量方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • C語言由淺入深講解線程的定義

    C語言由淺入深講解線程的定義

    這篇文章主要介紹了C語言中線程的基礎知識,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • c語言中聯(lián)合體和枚舉用法詳解

    c語言中聯(lián)合體和枚舉用法詳解

    結(jié)構(gòu)體、聯(lián)合體是C語言中的構(gòu)造類型,結(jié)構(gòu)體我們平時應該都用得很多,下面這篇文章主要給大家介紹了關(guān)于c語言中聯(lián)合體和枚舉用法的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • VSCode配置C++環(huán)境的方法步驟(MSVC)

    VSCode配置C++環(huán)境的方法步驟(MSVC)

    這篇文章主要介紹了VSCode配置C++環(huán)境的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • 使用Qt實現(xiàn)旋轉(zhuǎn)動畫效果

    使用Qt實現(xiàn)旋轉(zhuǎn)動畫效果

    這篇文章主要為大家詳細介紹了如何使用Qt實現(xiàn)旋轉(zhuǎn)動畫效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-11-11
  • C語言開發(fā)實現(xiàn)掃雷游戲

    C語言開發(fā)實現(xiàn)掃雷游戲

    這篇文章主要為大家詳細介紹了C語言開發(fā)實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評論

昌图县| 云南省| 高台县| 青州市| 布尔津县| 乌海市| 瓦房店市| 故城县| 涞源县| 玉龙| 陇川县| 晋宁县| 汤阴县| 汨罗市| 南城县| 五河县| 襄垣县| 明星| 长治县| 旬邑县| 龙里县| 肥东县| 佛学| 贵定县| 敖汉旗| 灵川县| 峡江县| 抚顺市| 西林县| 海宁市| 台东市| 个旧市| 盐山县| 荆州市| 旬邑县| 洪泽县| 文山县| 唐河县| 平利县| 客服| 佛山市|