亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++類和對象之相關特性解讀

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

一.類型轉換

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

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

以下是關于C++類類型轉換的詳細介紹:

隱式類型轉換

?構造函數(shù)實現(xiàn)的隱式轉換

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

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

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

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

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

類型轉換運算符實現(xià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類型的對象可以隱式轉換為int類型:

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

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

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;就會報錯,而必須顯式地調用構造函數(shù):B b(5);。

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

二.static成員

在C++中,static成員是類的一個重要特性,它與類本身相關聯(liá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)其與類的關系。例如:

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

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

生命周期

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

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

static成員函數(shù)

定義與調用

static成員函數(shù)是與類相關聯(lián)的函數(shù),而不是與類的某個具體對象相關聯(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ù)可以通過類名或類的對象來調用,但推薦使用類名調用。例如:

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

特點?

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

應用場景

  • 常用于實現(xià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ū)。它們在程序啟動時分配內存,在程序結束時釋放內存。
  • 與全局變量類似,static成員變量在全局數(shù)據(jù)區(qū)中有一個固定的地址,所有對象共享這個地址。
  • 靜態(tài)成員變量為所有類對象所共享,不屬于某個具體的對象,不存在對象中,存放在靜態(tài)區(qū)。

心得:

  • static成員變量和static成員函數(shù)是類的靜態(tài)特性,它們與類本身相關聯(lián),而不是與類的對象相關聯(lián)。
  • static成員變量需要在類的定義外初始化,并且可以通過類名或對象訪問。
  • 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關鍵字聲明。

特點

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

友元類

定義

  • 友元類是一個類,它的所有成員函數(shù)都可以訪問另一個類的私有和保護成員。
  • 友元類需要在類的定義中使用friend關鍵字聲明。例如:
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關鍵字聲明,并指定所屬類和函數(shù)名。

特點

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

小結:

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

四.內部類

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

內部類默認是外部類的友元類。

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

內部類和外部類為平行關系,計算大小時不算內部類,內部類不算外部類的一部分,收訪問限定符的限制

五.匿名對象

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

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

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

六.new

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

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

這行代碼會:

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

總結

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

相關文章

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

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

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

    關于Qt?C++中connect的幾種寫法代碼示例

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

    詳解C++ const修飾符

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

    win10中的dlib庫安裝過程

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

    C/C++實現(xiàn)crc碼計算和校驗

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

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

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

    C++ abs函數(shù)實際應用詳解

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

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

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

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

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

    C++高精度計時的幾種方法總結(測試函數(shù)運行時間)

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

最新評論