1. 程式人生 > >c++【基礎(二)】

c++【基礎(二)】

【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();
}