C++ primer 第7章 类
成員函數(shù)的聲明必須在類的內部,定義則既可以在類的內部,也可以在類的外部。
作為接口組成部分的非成員函數(shù),它們的定義和聲明都在類的外部。
類可以允許其他類或者函數(shù)訪問它的非公有成員,方法是令其他類或函數(shù)成為它的友元。如果類想把一個函數(shù)作為它的友元,只需要增加一條以friend關鍵字開始的函數(shù)聲明語句即可。
友元聲明只能出現(xiàn)在類定義的內部,但是在類內出現(xiàn)的具體位置不限。友元不是類的成員,不受所在區(qū)域訪問控制級別的約束。一般來說,最好在類定義開始或結束前的位置集中聲明友元。
如果一個類指定了友元類,聲明形式friend class 類名,則友元類的成員函數(shù)可以訪問此類包括非公有成員在內的所有成員。
友元關系不存在傳遞性。
可變數(shù)據(jù)成員,是在變量的聲明中加入mutable關鍵字,任何成員函數(shù),包括const成員函數(shù),都可以修改可變數(shù)據(jù)成員的值。
含有指針數(shù)據(jù)成員的類一般不宜使用默認的拷貝和賦值操作,如果類的數(shù)據(jù)成員都是內置類型的,則直接使用類對象執(zhí)行拷貝和賦值操作是可以的。
要想把類的成員函數(shù)定義成內聯(lián)函數(shù),有幾種不同的途徑。第一種是直接把函數(shù)定義放在類的內部,第二種是把函數(shù)定義放在類的外部,并且在定義之前顯示地指定inline。
類允許包含指向它自身類型的引用或指針。
如果類的數(shù)據(jù)成員是const、引用,或者屬于某種未提供默認構造函數(shù)的類類型,我們必須通過構造函數(shù)初始值列表為這些成員提供初值,示例如下:
類名(參數(shù)列表...):i(ii),ci(ii),ri(i){}
在很多類中,初始化和賦值的區(qū)別事關底層效率問題:前者直接初始化數(shù)據(jù)成員,后者則先初始化再賦值。除了效率問題外更重要的是,一些數(shù)據(jù)成員必須被初始化。
成員的初始化順序與它們在類定義中的出現(xiàn)順序一致:第一個成員先被初始化,然后第二個,以此類推。構造函數(shù)初始值列表中初始值的前后位置關系不會影響實際的初始化順序。
如果一個構造函數(shù)為所有參數(shù)都提供了默認實參,則它實際上也定義了默認構造函數(shù)。
將構造函數(shù)聲明為explicit可抑制構造函數(shù)的隱式轉換。關鍵字explicit只對一個實參的構造函數(shù)有效,需要多個實參的構造函數(shù)不能用于執(zhí)行隱式轉換,所以無需將這些構造函數(shù)指定為explicit。只能在類內聲明構造函數(shù)時使用explicit關鍵字,在類外部定義時不應加explicit關鍵字。
聚合類使得用戶可以直接訪問其成員,并且具有特殊的初始化語法形式。當一個類滿足如下條件時,我們說它是聚合的:
- 所有成員都是public的
- 沒有定義任何構造函數(shù)
- 沒有類內初始值
- 沒有基類也沒有虛函數(shù)
除了靜態(tài)常量成員之外,其他靜態(tài)成員不能在類的內部初始化。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結
以上是生活随笔為你收集整理的C++ primer 第7章 类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows下使用phpstudy搭建
- 下一篇: ElasticSearch(must、s