c++【基礎(二)】
阿新 • • 發佈:2018-11-30
【1】空struct是0,而空類是1的原因
struct Data{ }; struct Data data(變數); sizeof(Data)=0;
- struct型別,在C語言中,是定義結構體。data只需要開闢記憶體就可以了
class/struct Data{ }; Data data(物件); sizeof(Data)=1;
- struct在c++中,也是定義類的。和class的區別是:class定義的類預設是私有的,而struct定義的預設是公有的
作為物件的data來說
- 1.開闢記憶體
- 2.呼叫合適的建構函式CGoods(CGoods *this)
建構函式:物件的初始化
解構函式:釋放物件佔用的外部資源
【2】指標和引用有什麼區別
- 定義指標時,不需要初始化 定義引用一定要初始化
- 指標必須解引用 引用變數是自動解引用的
- 可以定義多級指標 引用只能有一級
- 引用比指標更安全
【3】在程式碼上如何解決淺拷貝問題
- 1.提供自定義的拷貝建構函式和賦值過載函式
- 2.拷貝建構函式和賦值過載函式宣告成private的
【4】物件的拷貝建構函式,能不能按值接收?
- 不能。從邏輯的角度來說,因為引數的傳遞本身就是拷貝。如果不使用引用型別,拷貝建構函式傳遞引數時又會呼叫拷貝建構函式,造成迴圈呼叫
【5】建構函式的初始化列表
- 建構函式之前執行的,專門給當前物件的成員變數指定初始化方式的
- 初始化列表中指定的初始化,其初始化順序和定義的順序有關,和他們在列表中出現的先後順序無關
eg:
class CText{
public:
CText(int b=20):_b(b),_a(_b)// 如果按照這裡初始化順序,則結果為 20 20
{} //可是最後打印出來的a是隨機值,b是20。說明是先初始化a,後初始化b
void show()
{
cout << _a<<"======"<< _b << endl;
}
private:
int _a;
int _b;
};
int main()
{
CText t;
t.show();
}