日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++总结篇(2)类和对象

發(fā)布時(shí)間:2025/3/11 c/c++ 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++总结篇(2)类和对象 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、類

1.1類的定義:
C++是一門面向?qū)ο蟮恼Z言,便就引入了類的概念,類在一定程度上與C語言中的結(jié)構(gòu)體很相似。Class為定義類的關(guān)鍵字,如下示例:

class student {char name[10];int age;int print(); };

類不僅可以用class來定義,還可以用struct定義,因?yàn)镃++完全包含C語言,二者不同的是,再類中沒有訪問限定時(shí),class默認(rèn)private訪問方式,struct默認(rèn)public訪問方式。

1.2類的使用:
類的成員都在類的作用域中,在外部無法直接調(diào)用,需要使用作用域解析符,示例如下:

class student { public:char name[10];int age;void print(); }; void student::print() {cout << age << endl; }

1.3類的大小:
類與結(jié)構(gòu)體一樣,都有大小,即所有成員大小之和,但仍遵守內(nèi)存對齊原則,空類的大小為1個(gè)字節(jié)。內(nèi)存對齊規(guī)則如下:

  • 第一個(gè)成員在與結(jié)構(gòu)體偏移量為0的地址處。
  • 其他成員變量要對齊到某個(gè)數(shù)字(對齊數(shù))的整數(shù)倍的地址處。 注意:對齊數(shù) =編譯器默認(rèn)的一個(gè)對齊數(shù) 與 該成員大小的較小值。 VS中默認(rèn)的對齊數(shù)為8,gcc中的對齊數(shù)為4
  • 結(jié)構(gòu)體總大小為:最大對齊數(shù)(所有變量類型最大者與默認(rèn)對齊參數(shù)取最小)的整數(shù)倍。
  • 如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對齊到自己的最大對齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整體大小就是 所有最大對齊數(shù)(含嵌套結(jié)構(gòu)體的對齊數(shù))的整數(shù)倍。
  • 1.4類的訪問方式:
    private(私有):在類外不能調(diào)用
    public(公有:可在類外調(diào)用
    proteted(保護(hù)):在類外不能調(diào)用

    訪問權(quán)限作用域從該訪問限定符出現(xiàn)的位置開始直到下一個(gè)訪問限定符出現(xiàn)時(shí)為止

    2、this指針

    2.1作用:
    如果一個(gè)類定義了很多個(gè)對象,在調(diào)用某個(gè)對象中的成員函數(shù)來訪問某一變量時(shí),都是通過指針來訪問的,編譯器自動(dòng)給成員函數(shù)添加了一個(gè)指針參數(shù),這個(gè)指針便是this指針,其指向需要訪問的變量。
    2.2this指針特性:

  • this指針的類型:類類型* const
  • 只能在“成員函數(shù)”的內(nèi)部使用
  • this指針本質(zhì)上其實(shí)是一個(gè)成員函數(shù)的形參,是對象調(diào)用成員函數(shù)時(shí),將對象地址作為實(shí)參傳遞給this 形參。所以對象中不存儲(chǔ)this指針。
  • this指針是成員函數(shù)第一個(gè)隱含的指針形參,一般情況由編譯器通過ecx寄存器自動(dòng)傳遞,不需要用戶傳遞
  • 3、構(gòu)造函數(shù)

    3.1概念
    構(gòu)造函數(shù)是一個(gè)特殊的成員函數(shù),名字與類名相同,創(chuàng)建類類型對象時(shí)由編譯器自動(dòng)調(diào)用,保證每個(gè)數(shù)據(jù)成員 都有 一個(gè)合適的初始值,并且在對象的生命周期內(nèi)只調(diào)用一次。
    3.2 特性:

  • 函數(shù)名與類名相同。
  • 無返回值。
  • 對象實(shí)例化時(shí)編譯器自動(dòng)調(diào)用對應(yīng)的構(gòu)造函數(shù)。
  • 構(gòu)造函數(shù)可以重載。
  • 如果類中沒有顯式定義構(gòu)造函數(shù),則C++編譯器會(huì)自動(dòng)生成一個(gè)無參的默認(rèn)構(gòu)造函數(shù),一旦用戶顯式定 義編譯器將不再生成。
  • 無參的構(gòu)造函數(shù)和全缺省的構(gòu)造函數(shù)都稱為默認(rèn)構(gòu)造函數(shù),并且默認(rèn)構(gòu)造函數(shù)只能有一個(gè)。注意:無參構(gòu)造函數(shù)、全缺省構(gòu)造函數(shù)、我們沒寫編譯器默認(rèn)生成的構(gòu)造函數(shù),都可以認(rèn)為是默認(rèn)成員函數(shù)。
  • 3.3 示例:

    class A { public:A(int x, int y){a = x;b = y;}void print(){cout << a << " " << " " << b << endl;} private:int a;int b; }; int main() {A a(1,2);a.print();system("pause");return 0; }

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

    4.1 概念:
    與構(gòu)造函數(shù)功能相反,析構(gòu)函數(shù)不是完成對象的銷毀,局部對象銷毀工作是由編譯器完成的。而 對象在銷毀時(shí)會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù),完成類的一些資源清理工作。析構(gòu)函數(shù)也是特殊的成員函數(shù)。
    4.2 特性:

  • 析構(gòu)函數(shù)名是在類名前加上字符 ~。
  • 無參數(shù)無返回值。
  • 一個(gè)類有且只有一個(gè)析構(gòu)函數(shù)。若未顯式定義,系統(tǒng)會(huì)自動(dòng)生成默認(rèn)的析構(gòu)函數(shù)。
  • 對象生命周期結(jié)束時(shí),C++編譯系統(tǒng)系統(tǒng)自動(dòng)調(diào)用析構(gòu)函數(shù)。
  • 4.3 示例:

    class A { public:A(int x, int y){a = x;b = y;ptr = (int *)malloc(sizeof(int));}~A(){if (ptr){free(ptr);ptr = nullptr;}a = 0;b = 0;} private:int a;int b;int *ptr; };

    5、拷貝構(gòu)造函數(shù)

    5.1概念:
    只有單個(gè)形參,該形參是對本類類型對象的引用(一般常用const修飾),在用已存在的類類型對象 創(chuàng)建新對象時(shí)由編譯器自動(dòng)調(diào)用。
    5.2 特性:

  • 拷貝構(gòu)造函數(shù)是構(gòu)造函數(shù)的一個(gè)重載形式。拷貝構(gòu)造函數(shù)的參數(shù)

  • 只有一個(gè)且必須使用引用傳參,使用傳值方式會(huì)引發(fā)無窮遞歸調(diào)用。

    5.3 示例:

  • class A { public:A(int x, int y){a = x;b = y;ptr = (int *)malloc(sizeof(int));}A(const A& d){a = d.a;b = d.b;} private:int a;int b;int *ptr; };

    6、賦值運(yùn)算符重載

    6.1 概念:
    C++為了增強(qiáng)代碼的可讀性引入了運(yùn)算符重載,運(yùn)算符重載是具有特殊函數(shù)名的函數(shù),也具有其返回值類 型,函數(shù)名字以及參數(shù)列表,其返回值類型與參數(shù)列表與普通的函數(shù)類似。函數(shù)名字為:關(guān)鍵字operator后面接需要重載的運(yùn)算符符號。
    6.2規(guī)則:

  • 不能通過連接其他符號來創(chuàng)建新的操作符:比如operator@
  • 重載操作符必須有一個(gè)類類型或者枚舉類型的操作數(shù)
  • 用于內(nèi)置類型的操作符,其含義不能改變,例如:內(nèi)置的整型+,不 能改變其含義
  • 作為類成員的重載函數(shù)時(shí),其形參看起來比操作數(shù)數(shù)目少1成員函數(shù)的
  • 操作符有一個(gè)默認(rèn)的形參this,限定為第一個(gè)形參 .* 、:: 、sizeof 、?: 、。
  • 6.3 示例:

    class A { public:A(int x, int y){a = x;b = y;ptr = (int *)malloc(sizeof(int));}bool operator==(const A &d1){return (d1.a == a&&d1.b == b);} private:int a;int b;int *ptr; };

    7、友元函數(shù)

    7.1 概念:
    友元函數(shù)可以直接訪問類的私有成員,它是定義在類外部的普通函數(shù),不屬于任何類,但需要在類的內(nèi)部聲 明,聲明時(shí)需要加friend關(guān)鍵字。
    7.2 特性:

  • 友元函數(shù)可訪問類的私有成員,但不是類的成員函數(shù)

  • 友元函數(shù)不能用const修飾

  • 友元函數(shù)可以在類定義的任何地方聲明,不受類訪問限定符限制

  • 一個(gè)函數(shù)可以是多個(gè)類的友元函數(shù)

  • 友元函數(shù)的調(diào)用與普通函數(shù)的調(diào)用和原理相同

    7.3 示例:

  • class A { friend void print(const A& d); public:A(int x, int y){a = x;b = y;} private:int a;int b; }; void print(const A& d) {cout << d.a << " " << d.b << " " << endl; }

    8、友元類

    8.1 概念:
    友元類的所有成員函數(shù)都可以是另一個(gè)類的友元函數(shù),都可以訪問另一個(gè)類中的非公有成員。
    8.2 特性:

  • 友元關(guān)系是單向的,不具有交換性。
  • 比如上述Time類和Date類,在Time類中聲明Date類為其友元類,那么可以在Date類中直接訪問Time
  • 類的私有成員變量,但想在Time類中訪問Date類中私有的成員變量則不行。
  • 友元關(guān)系不能傳遞,如果B是A的友元,C是B的友元,則不能說明C時(shí)A的友元
  • 友元類需要前置聲明
  • 總結(jié)

    以上是生活随笔為你收集整理的C++总结篇(2)类和对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。