1.類和物件的基礎知識:類實際上是對某種型別的物件變數和方法的原型,類是從一些具有相同屬性或功能的具體例項,抽象出共有的一些屬性的,自定義抽象資料型別。public成員可從類外部直接訪問,private/protected不能從類外部直接訪問,每個限定符在類體中可以使用多次,類體中如果沒有定義限定符,則預設為私有的,類的訪問限定符體現了物件導向的封裝性。
結構體內存對其規則:
(1).
第乙個成員在與結構體變數偏移量為
0的位址處。
(2).
其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。
(3).
結構體總大小為最大對齊數(每個成員變數除了第乙個成員都有乙個對齊數)的整數倍。
(4).
如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數(含巢狀結構體的對齊數)的整數倍。
2.四個預設成員函式及運算子過載:
【建構函式】
成員變數為私有的,要對它們進行初始化,必須用乙個公有成員函式來進行。同時這個函式應該有且僅在定義物件時
自動執行
一次,這時呼叫的函式稱為建構函式(
constructor)。
建構函式是
特殊的成員函式,其特徵如下: 1.
函式名與類名相同。 2.
無返回值。
3.物件構造(物件例項化)時系統
自動呼叫對應的建構函式。 4.
建構函式可以過載。 5.
建構函式可以在類中定義,也可以在類外定義。 6.
如果類定義中沒有給出建構函式,則
c++編譯器自動產生乙個預設的建構函式,但只要我們定義了乙個建構函式,系統就不會自動生成預設的建構函式。 7.
無參的建構函式
和全預設值的建構函式
都認為是預設建構函式,並且預設的建構函式只能有乙個。
(2).
【拷貝建構函式】
建立物件時使用
同類物件
來進行初始化,這時所用的建構函式稱為拷貝建構函式(
copy constructor
),拷貝建構函式是
特殊的建構函式。
特徵:
1.拷貝建構函式其實是乙個建構函式的過載。 2.
拷貝建構函式的引數必須使用引用傳參,使用傳值方式會引發無窮遞迴呼叫。(思考為什麼?) 3.
若未顯示定義,系統會預設預設的拷貝建構函式。預設的拷貝建構函式會,依次拷貝類成員進行初始化。
(3).
【析構函式】
當乙個物件的生命週期結束時,
c++編譯系統會自動呼叫乙個成員函式,這個特殊的成員函式即析構函式(
destructor)
建構函式是
特殊的成員函式,其特徵如下: 1.
析構函式在類名加上字元~。
2.析構函式無引數無返回值。 3.
乙個類有且只有乙個析構函式。若未顯示定義,系統會自動生成預設的析構函式。 4.
物件生命週期結束時,
c++編譯系統系統
自動呼叫
析構函式。
(4).
【賦值運算子過載】
拷貝建構函式是建立的物件,使用乙個已有物件來初始化這個準備建立的物件。賦值運算子的過載是對乙個已存在的物件進行拷貝賦值。
3.隱含的this指標,運算子過載:
隱含的this指標
1.每個成員函式都有乙個指標形參
,它的名字是固定的,稱為
this
指標,this
指標是隱式的。
(建構函式比較特殊,沒有這個隱含
this形參)
2.編譯器會對成員函式進行處理
,在物件呼叫成員函式時,物件位址作實參傳遞給成員函式的第乙個形參
this
指標。 3.
this
指標是成員函式
隱含指標形參
,是編譯器自己處理的,我們
不能在成員函式的形參中新增
this
指標的引數定義,也
不能在呼叫時顯示傳遞物件的位址給
this
指標。
運算子過載是通過建立運算子函式實現的,運算子函式定義了過載的運算子將要進行的操作,運算子函式的定義和其他函式的定義類似,唯一的區別是運算子函式的函式名是由關鍵字operator和其後要過載的運算子符號構成的。
四個預設成員函式和運算子過載
1.類的定義 在c 中,用 類 描述 物件 所謂的物件是指現實世界中的一切事物。類是建立物件的模板,乙個類可以建立多個物件,每個物件都是類的乙個具體例項,擁有類的成員變數和成員函式。類的組成 資料 成員變數 和程式 成員函式 例子 class 1 建構函式 私有成員變數要對它們進行初始化,必須用乙個...
C 四個預設成員函式 運算子過載
1 1 類的定義 在c 中,用 類 描述 物件 所謂的物件是指現實世界中的一切事物。類是建立物件的模板,乙個類可以建立多個物件,每個物件都是類的乙個具體 例項,擁有類的成員變數和成員函式。乙個簡單的類定義 class student 2 訪問限定符 宣告了對類的外部介面,所有來自外部的訪問通過介面進...
類和物件 四個預設成員函式 運算子過載
類的定義 類 class 實際上是某種型別的物件變數和方法的原型.類是從一些具有相同屬性或功能的具體例項中抽象出共有的一些屬性。類是乙個新的資料型別,它和結構體有點相似,是由不同資料型別組成的集合體,但類要比結構體增加了運算元據的行為,這個行為就是函式,還有乙個區別就是類內存在類成員訪問的修飾限定符...