1. 程式人生 > >複習c++第一彈

複習c++第一彈

物件的賦值。

#include <iostream>

using namespace std;

	class Sample
	{
	public:
	Sample(){}
	Sample(int a){x=a;}
	Sample(Sample &a){x=a.x++;}
	void disp(){cout<<x++;}
	private:
	int x;
	};


	void fun(Sample &s1, Sample s2) {
	s1.disp ();s2.disp ();
	}
	int main()
	{
	Sample s1(2),s2=s1;
    fun(s2,s1);
	s1.disp ();
	s2.disp ();
	}

若類中沒有解構函式,則類的兩個物件的賦值,為直接賦值,分別令其資料成員相等即可。

若有對應匹配的建構函式,則呼叫建構函式進行賦值。
此題注意s1,s2實參和形參順序不一致。
s1.x初始化為3
s2.x初始化為2
進入fun語句。 s2為引用傳遞,即形參為s2的別名,呼叫disp後s2實參的值也對應發生變化,s2.x=3.s1為值傳遞。呼叫建構函式賦值,因此s1本身又加1,s1.x=4,而形參的x的3。
輸出 2 3
然後 s1輸出 4
s2輸出3
答案 2343

例題2 解構函式
#include

using namespace std;

class Sample
{
int x;
public:
Sample(){x=0;}
Sample(int a) {cout<<(x=a);}
~Sample()
{
cout<<++x;
}
void disp()
{
cout<<x;
}
};

int  main()
{
	Sample s1(2);
	s1.disp ();
	s1.~Sample ();
	s1.disp();
}

手動呼叫解構函式,物件不銷燬記憶體空間(非new建立的物件)
淺拷貝(位拷貝)和深拷貝
淺拷貝:即簡單的將實參的資料成員複製給了形參,二者各佔獨立的空間。
深拷貝:通過建構函式來實現,通常將建構函式的形參設為const避免被改變,

c++預設引數特點:
1、當函式既有原型宣告又有定義的時候,預設引數就只能在原型宣告中定義。
2、在函式原型中,所有帶預設值得引數都必須出現在沒有預設值的右邊,也就是一開始定義帶有預設值的引數,後邊就不能再定義沒有預設值得引數。
3、不循序某個引數省略後,再給其後的引數指定引數值。
例如 Complex(,9,6)是錯誤的
和特點2 剛剛好反著來。
畢竟左邊可能會沒有預設引數,所以左邊一定要有實參進去。
4、避免二義性
在函式過載中會涉及