欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一.類型轉(zhuǎn)換

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

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

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

隱式類型轉(zhuǎn)換

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

如果一個(gè)類的構(gòu)造函數(shù)只有一個(gè)參數(shù)(除了可能的默認(rèn)參數(shù)外),那么這個(gè)構(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--> /* ... */ }
};

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

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

在類類型有多個(gè)參數(shù)時(shí),可以使用{ xxx ,xxx },的形式來進(jìn)行轉(zhuǎn)換,不能使用(),因?yàn)椋ǎ?huì)計(jì)算出括號(hào)內(nèi)最后一個(gè)表達(dá)式的值

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

類可以定義類型轉(zhuǎn)換運(yùn)算符,將類的對(duì)象隱式轉(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; }
};

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

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

這種隱式轉(zhuǎn)換可能會(huì)導(dǎo)致一些意外的錯(cuò)誤,因此可以通過在構(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;就會(huì)報(bào)錯(cuò),而必須顯式地調(diào)用構(gòu)造函數(shù):B b(5);。

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

二.static成員

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

static成員變量

定義與初始化

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

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

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

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

訪問方式

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

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

無論通過類名還是對(duì)象訪問,static成員變量都是同一個(gè)變量。

生命周期

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

靜態(tài)成員變量不能在聲明位置給缺省值初始化,因?yàn)槿笔≈凳莻€(gè)構(gòu)造函數(shù)初始化列表的,靜態(tài)成員變量不屬于某個(gè)對(duì)象,不?構(gòu)造函數(shù)初始化列表.

static成員函數(shù)

定義與調(diào)用

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

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;
    }
};
點(diǎn)擊并拖拽以移動(dòng)

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

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

特點(diǎn)?

  • static成員函數(shù)沒有this指針,因?yàn)樗灰蕾囉诰唧w的對(duì)象。
  • 它可以訪問類的static成員變量和其他static成員函數(shù)。
  • 靜態(tài)成員也是類的成員,受public、protected、private訪問限定符的限制。

應(yīng)用場(chǎng)景

  • 常用于實(shí)現(xiàn)與類相關(guān)的工具函數(shù),這些函數(shù)不需要訪問類的對(duì)象的成員變量。
  • 例如,實(shí)現(xiàn)一個(gè)全局的計(jì)數(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成員的存儲(chǔ)位置

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

心得:

  • static成員變量和static成員函數(shù)是類的靜態(tài)特性,它們與類本身相關(guān)聯(lián),而不是與類的對(duì)象相關(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)的,因?yàn)闆]有this指針。
  • 突破類域就可以訪問靜態(tài)成員,可以通過類名::靜態(tài)成員或者對(duì)象.靜態(tài)成員 來訪問靜態(tài)成員變量和靜態(tài)成員函數(shù)。

三.友元

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

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

友元函數(shù)

定義

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

特點(diǎn)

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

友元類

定義

  • 友元類是一個(gè)類,它的所有成員函數(shù)都可以訪問另一個(gè)類的私有和保護(hù)成員。
  • 友元類需要在類的定義中使用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;
    }
};

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

特點(diǎn)

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

友元成員函數(shù)

定義

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

特點(diǎn)

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

小結(jié):

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

四.內(nèi)部類

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

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

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

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

五.匿名對(duì)象

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

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

匿名對(duì)象?命周期只在當(dāng)前??,?般臨時(shí)定義?個(gè)對(duì)象當(dāng)前??下即可。

六.new

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

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

這行代碼會(huì):

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

總結(jié)

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

相關(guān)文章

  • 詳解如何利用C++實(shí)現(xiàn)一個(gè)反射類

    詳解如何利用C++實(shí)現(xiàn)一個(gè)反射類

    這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)一個(gè)反射類,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • 關(guān)于Qt?C++中connect的幾種寫法代碼示例

    關(guān)于Qt?C++中connect的幾種寫法代碼示例

    這篇文章介紹了Qt中connect函數(shù)的不同編寫方式,包括傳統(tǒng)的槽函數(shù)寫法、使用函數(shù)指針的寫法、Lambda表達(dá)式以及使用QOverload選擇重載信號(hào)的寫法,每種寫法都有其特點(diǎn)和適用場(chǎng)景,程序員應(yīng)根據(jù)具體需求選擇最合適的方式,需要的朋友可以參考下
    2024-11-11
  • 詳解C++ const修飾符

    詳解C++ const修飾符

    const 是 constant 的縮寫,const可以幫我們避免無意之中的錯(cuò)誤操作,本文給大家介紹C++ const修飾符的相關(guān)知識(shí),通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-05-05
  • win10中的dlib庫安裝過程

    win10中的dlib庫安裝過程

    這篇文章主要介紹了win10中dlib庫的安裝過程,本文通過實(shí)例圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • C/C++實(shí)現(xiàn)crc碼計(jì)算和校驗(yàn)

    C/C++實(shí)現(xiàn)crc碼計(jì)算和校驗(yàn)

    循環(huán)冗余校驗(yàn)(Cyclic Redundancy Check, CRC)是一種根據(jù)網(wǎng)絡(luò)數(shù)據(jù)包或計(jì)算機(jī)文件等數(shù)據(jù)產(chǎn)生簡(jiǎn)短固定位數(shù)校驗(yàn)碼的一種信道編碼技術(shù)。本文主要介紹了C++實(shí)現(xiàn)crc碼計(jì)算和校驗(yàn)的方法,需要的可以參考一下
    2023-03-03
  • 詳解C++中String類模擬實(shí)現(xiàn)以及深拷貝淺拷貝

    詳解C++中String類模擬實(shí)現(xiàn)以及深拷貝淺拷貝

    這篇文章主要介紹了詳解C++中String類模擬實(shí)現(xiàn)以及深拷貝淺拷貝的相關(guān)資料,希望通過本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的方法,需要的朋友可以參考下
    2017-10-10
  • C++ abs函數(shù)實(shí)際應(yīng)用詳解

    C++ abs函數(shù)實(shí)際應(yīng)用詳解

    本文我們來講C++的abs函數(shù)以及實(shí)戰(zhàn)運(yùn)用,C++中的abs函數(shù)。在C++中使用abs函數(shù)要注意存在兩種版本,一種是在stdlmb.h中定義的版本,另一個(gè)是在cmath頭文件中定義的。夷實(shí)上在stdlib.h文件是C的函數(shù),而cmath中的是C++版本
    2022-08-08
  • C++實(shí)現(xiàn)刪除txt文件中指定內(nèi)容的示例代碼

    C++實(shí)現(xiàn)刪除txt文件中指定內(nèi)容的示例代碼

    這篇文章主要介紹了C++實(shí)現(xiàn)刪除txt文件中指定內(nèi)容的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 深入分析C++中類的大小

    深入分析C++中類的大小

    本篇文章深入分析了C++中類的大小問題。需要的朋友參考下
    2013-05-05
  • C++高精度計(jì)時(shí)的幾種方法總結(jié)(測(cè)試函數(shù)運(yùn)行時(shí)間)

    C++高精度計(jì)時(shí)的幾種方法總結(jié)(測(cè)試函數(shù)運(yùn)行時(shí)間)

    本文介紹了C++中常用的幾種程序計(jì)時(shí)方法,包括clock()函數(shù)、GetTickCount()、QueryPerformanceCounter()以及C++11中的chrono庫函數(shù),這篇文章主要介紹了C++高精度計(jì)時(shí)的幾種方法,需要的朋友可以參考下
    2024-09-09

最新評(píng)論