1,聲明與定義。c++
//聲明式以下:git
extern int x; //對象式(變量式)聲明程序員
std::size_t numDigits(int number); //函數式聲明函數
class Widget; //類聲明this
template<typename T> //模板類聲明設計
class GraphNode;3d
//定義式以下:指針
int x; //對象的定義對象
std::size_t numDigits(int number) //函數的定義blog
{
...
}
class Widget //類的定義
{
...
};
template<typename T> //模板類的定義
class GraphNode
{
...
};
聲明式,其實就是讓編譯器知道名稱和類型。這樣編譯的時候就可以經過。
定義式,其實就是讓編譯器知道細節。這樣在連接器鏈接的時候就可以找到對應的代碼。
2,結構、類等都是程序員自定義類型,相比於int,它是自定義類型,而int是內置類型。因此他們都是類型。只有定義該類型的變量纔會分配內存。
3,對於c++的類,類的對象存儲的是類中描述的數據成員。這些數據成員多是本身類中聲明的,也多是父類繼承而來的。但類的對象中並無存儲成員函數。成員函數實際上是全部對象共用的。調用的時候,會隱藏一個this指針傳入成員函數用以區分是哪一個對象調用了成員函數。
4,一個程序的設計能夠有很是多種:面向對象仍是面向過程。若是是面向對象的話,是經過繼承類實現代碼重用仍是不經過繼承。是否須要虛繼承、是否須要虛函數、是否須要支持模板等等,還能夠考慮使用宏來實現,速度比函數調用還要快。
5,c++的虛函數和虛基類會有內存上的開銷。能夠反思虛函數表。
6,類的數據成員有兩種類型:靜態數據成員和非靜態數據成員。類的成員函數有三種類型:靜態成員函數、非靜態成員函數、虛函數
7,
8,真正的c++對象模型:
從圖中能夠看出,非靜態數據成員以及一個虛表指針被包含在對象中。靜態成員函數、非靜態成員函數、靜態數據成員都被放在對象外面。虛函數的地址則放在虛表中。
9,
指針的類型轉換,不改變指針自己的值(是一個地址),而是改變編譯器解釋這個地址所指向的內存的方式。
10,