孫鑫VC++講座筆記-(2)C++

1, c語言中,結構體struct中不能包括函數的,而在C++中struct中可以包括函數。
2,C++中結構體和類可以通用,區別主要表現在訪問控制方面:struct中默認是public,而 class中默認的是private。
3,構造函數最重要的作用是創建對象的本身,C++中每個類可以擁有多個構造函數,但必須至少有一個構造函數,當一個類中沒有顯式提供任何構造函數,C++編輯器自動提供一個默認的不帶參數的構造函數,這個默認的構造函數只負責構造對象,不做任何初始化工作。但在一個類中只要自己定義一個構造函數,不管帶參不帶參,編輯器不再提供默認的不帶參的構造函數了。構造函數沒有返回值。
4,析構函數當一個對象生命週期結束時候被調用來回收對象佔用的內存空間。一個類只需有一個析構函數。析構函數沒有返回值也不的帶參數。
5,析構函數的作用與構造函數相反,對象超出起作用範圍對應的內存空間被系統收回,或被程序用delete刪除的時候,對象的析構函數被調用。
6,函數的重載條件:函數的參數類型、個數不同,才能構成函數的重載。重載是發生在同一個類中。
7,類是抽象的,不佔用具體物理內存,只有對象是實例化的,是佔用具體物理內存的。
8,this指針是隱含指針,指向對象本身(this指針不是指向類的),代表了對象的地址。所有的對象調用的成員函數都是同一代碼段,但每個對象都有自己的數據成員。當對象通過調用它的成員函數來訪問它的數據成員的時候,成員函數除了接收實參外,還接收了對象的地址,這個地址被一個隱藏的形參this所獲取,通過這個this指針可以訪問對象的數據成員和成員函數。
9,對象中public屬性的成員在外部和子類中都可以被訪問;protected屬性的成員在外部不能被訪問,在子類中是可以訪問的;private屬性在子類中和外部都不能被訪問。
10,類的繼承訪問特性:(public,protected,private)
 a)基類中private屬性成員,子類無論採用那種繼承方式都不能訪問。
 b)採用public繼承,基類中的public,protected屬性的成員訪問特性在子類中仍然保持一致。
 c)採用protected繼承,基類中的public,protected屬性成員訪問特性在子類中變爲protected.
 d)採用provate繼承,基類中的public,protected屬性成員訪問特性在子類中變爲provate.
11,子類和基類的構造函數或析構函數調用順序:
 當調用子類的構造函數時候先調用基類的構造函數(如果沒有指明,則調用基類卻省那個不帶參數的構造函數;如果要指明則在子類構造函數名後加":基類名(參數)")。析構函數則相反,先調用子類析構函數,後調用基類的析構函數。
12,函數的覆蓋:
 函數的覆蓋是發生在發生父類和子類之間的。(函數的重載是發生在同一個類中)
 當子類中重寫了父類的某些成員函數後,子類中的成員函數覆蓋了父類的對應同名成員函數。
13,用父類指針訪問子類對象成員時候,只能訪問子類從父類繼承來的那部分。(這時候外部不可以訪問父類中保護和私有的部分,子類中不可訪問父類私有部分。)
14,多態性:在基類的的成員函數前加virturl變成虛函數,當用子類對象調用該功能的成員函數時候,子類有的就調用子類的,子類沒有的就調用基類的。
 當C++編譯器在編譯的時候,發現被調用的成員函數在基類中定義的是虛函數,這個時候C++就會採用遲綁定技術(late binding),在運行的時候,依據對象的類型來確定調用的哪個函數,子類有調用子類的,子類沒有的就調用基類的。
 如果基類中的成員函數不是虛函數,則這時候的綁定是早期綁定,在編譯的時候就已經確定該調用哪個函數。
15,純虛函數:在類中定義時 eg: virtual void f1()=0;
 純虛函數沒有函數體,含有純虛函數的類叫做抽象類,抽象類不能實例化對象。當子類從抽象類的基類中派生出來時候,如果沒有實現基類中的純虛函數,則子類也是個抽象類,也不能實例化對象。
 純虛函數被標名爲不具體實現的虛成員函數,純虛函數可以讓類只具有操作的名稱而不具有具體的操作的內容,讓派生類在繼承的時候再給出具體的定義。如果派生類沒有給出基類的純虛函數的具體定義的時候,派生類也爲一個抽象類,也不能實例化對象。
16,引用:變量的別名。引用需要在定義的時候用一變量或對象初始化自己。引用一旦在定義的時候初始化,就維繫在一個特定的變量或對象上。
 引用不佔用物理內存(與定義引用的目標共用同一內存)。指針變量需要佔用物理內存,用來存儲地址。
1, c語言中,結構體struct中不能包括函數的,而在C++中struct中可以包括函數。
2,C++中結構體和類可以通用,區別主要表現在訪問控制方面:struct中默認是public,而 class中默認的是private。
3,構造函數最重要的作用是創建對象的本身,C++中每個類可以擁有多個構造函數,但必須至少有一個構造函數,當一個類中沒有顯式提供任何構造函數,C++編輯器自動提供一個默認的不帶參數的構造函數,這個默認的構造函數只負責構造對象,不做任何初始化工作。但在一個類中只要自己定義一個構造函數,不管帶參不帶參,編輯器不再提供默認的不帶參的構造函數了。構造函數沒有返回值。
4,析構函數當一個對象生命週期結束時候被調用來回收對象佔用的內存空間。一個類只需有一個析構函數。析構函數沒有返回值也不的帶參數。
5,析構函數的作用與構造函數相反,對象超出起作用範圍對應的內存空間被系統收回,或被程序用delete刪除的時候,對象的析構函數被調用。
6,函數的重載條件:函數的參數類型、個數不同,才能構成函數的重載。重載是發生在同一個類中。
7,類是抽象的,不佔用具體物理內存,只有對象是實例化的,是佔用具體物理內存的。
8,this指針是隱含指針,指向對象本身(this指針不是指向類的),代表了對象的地址。所有的對象調用的成員函數都是同一代碼段,但每個對象都有自己的數據成員。當對象通過調用它的成員函數來訪問它的數據成員的時候,成員函數除了接收實參外,還接收了對象的地址,這個地址被一個隱藏的形參this所獲取,通過這個this指針可以訪問對象的數據成員和成員函數。
9,對象中public屬性的成員在外部和子類中都可以被訪問;protected屬性的成員在外部不能被訪問,在子類中是可以訪問的;private屬性在子類中和外部都不能被訪問。
10,類的繼承訪問特性:(public,protected,private)
 a)基類中private屬性成員,子類無論採用那種繼承方式都不能訪問。
 b)採用public繼承,基類中的public,protected屬性的成員訪問特性在子類中仍然保持一致。
 c)採用protected繼承,基類中的public,protected屬性成員訪問特性在子類中變爲protected.
 d)採用provate繼承,基類中的public,protected屬性成員訪問特性在子類中變爲provate.
11,子類和基類的構造函數或析構函數調用順序:
 當調用子類的構造函數時候先調用基類的構造函數(如果沒有指明,則調用基類卻省那個不帶參數的構造函數;如果要指明則在子類構造函數名後加":基類名(參數)")。析構函數則相反,先調用子類析構函數,後調用基類的析構函數。
12,函數的覆蓋:
 函數的覆蓋是發生在發生父類和子類之間的。(函數的重載是發生在同一個類中)
 當子類中重寫了父類的某些成員函數後,子類中的成員函數覆蓋了父類的對應同名成員函數。
13,用父類指針訪問子類對象成員時候,只能訪問子類從父類繼承來的那部分。(這時候外部不可以訪問父類中保護和私有的部分,子類中不可訪問父類私有部分。)
14,多態性:在基類的的成員函數前加virturl變成虛函數,當用子類對象調用該功能的成員函數時候,子類有的就調用子類的,子類沒有的就調用基類的。
 當C++編譯器在編譯的時候,發現被調用的成員函數在基類中定義的是虛函數,這個時候C++就會採用遲綁定技術(late binding),在運行的時候,依據對象的類型來確定調用的哪個函數,子類有調用子類的,子類沒有的就調用基類的。
 如果基類中的成員函數不是虛函數,則這時候的綁定是早期綁定,在編譯的時候就已經確定該調用哪個函數。
15,純虛函數:在類中定義時 eg: virtual void f1()=0;
 純虛函數沒有函數體,含有純虛函數的類叫做抽象類,抽象類不能實例化對象。當子類從抽象類的基類中派生出來時候,如果沒有實現基類中的純虛函數,則子類也是個抽象類,也不能實例化對象。
 純虛函數被標名爲不具體實現的虛成員函數,純虛函數可以讓類只具有操作的名稱而不具有具體的操作的內容,讓派生類在繼承的時候再給出具體的定義。如果派生類沒有給出基類的純虛函數的具體定義的時候,派生類也爲一個抽象類,也不能實例化對象。
16,引用:變量的別名。引用需要在定義的時候用一變量或對象初始化自己。引用一旦在定義的時候初始化,就維繫在一個特定的變量或對象上。
 引用不佔用物理內存(與定義引用的目標共用同一內存)。指針變量需要佔用物理內存,用來存儲地址。
發佈了30 篇原創文章 · 獲贊 4 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章