複習c++第一彈
阿新 • • 發佈:2018-11-25
物件的賦值。
#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、避免二義性
在函式過載中會涉及