程序設計實習作業 02 各種構造函數和析構函數
阿新 • • 發佈:2018-03-10
number ati ostream -- AC this 重載 cin OS
//輸出 9 22 5 #include <iostream> using namespace std; class Sample { public: int v; Sample(int n){ v = n ; } Sample(){ } Sample(const Sample & a){ v = a.v + 2; } }; void PrintAndDouble(Sample o) { cout << o.v; cout << endl; }int main() { Sample a(5); Sample b = a; PrintAndDouble(b); //註意這裏調用了復制構造函數 Sample c = 20; PrintAndDouble(c); //註意這裏調用了復制構造函數 Sample d; d = a; cout << d.v; //本來是5,用printanddouble輸出就多了2 return 0; }
//先輸出123 然後輸出 m,n #include <iostream> using namespacestd; class A { public: int val; A(int a){ val = a; } A(){ val = 123; } A & GetObj(){ return *this; //返回 GetObj成員函數 作用的對象 } }; int main() { int m,n; A a; cout << a.val << endl;while(cin >> m >> n) { a.GetObj() = m; cout << a.val << endl; a.GetObj() = A(n); cout << a.val<< endl; } return 0; }
//重載 ”=“ 給復數賦值 #include <iostream> #include <cstring> #include <cstdlib> using namespace std; class Complex { private: double r,i; public: void Print() { cout << r << "+" << i << "i" << endl; } Complex operator=(const char* a){ string s = a; int pos = s.find("+",0); //從0號開始查找“+“的位置 string sTmp = s.substr(0,pos); // 不考慮“” 從第0位開始截取長度為pos的字符串 此處pos=1 r = atof(sTmp.c_str()); string sTmp1 = s.substr(pos+1,s.length()-2-pos); // 從pos+1位開始截取s.length-2-pos長度的字符串 此處為1
//封閉類對象的初始化 #include <iostream> #include <string> using namespace std; class Base { public: int k; Base(int n):k(n) { } }; class Big { public: int v; Base b; Big(int n):v(n),b(n){ //直接調用成員對象的類型轉換構造函數 } }; int main() { int n; while(cin >>n) { Big a1(n); Big a2 = a1; cout << a1.v << "," << a1.b.k << endl; cout << a2.v << "," << a2.b.k << endl; } }
//復制構造函數 和 析構函數 在臨時對象生成時的作用 #include <iostream> using namespace std; class Apple { public: static int nTotalNumber; //全局變量 Apple(){ nTotalNumber ++; //無參初始化的時候 總數加一 } ~Apple(){ nTotalNumber --; //臨時變量消失時 總數也減一 } static void PrintTotal() { cout << nTotalNumber << endl; } }; int Apple::nTotalNumber = 0; Apple Fun(const Apple & a) { a.PrintTotal(); return a; } int main() { Apple * p = new Apple[4]; //無參構造函數調用4次 Fun(p[2]); //Fun函數的返回值是Apple類型的臨時對象,消失時使得總數減一 Apple p1,p2; //無參構造函數調用兩次 Apple::PrintTotal (); //4-1+2 delete [] p; //5-4 p1.PrintTotal (); return 0; }
i = atof (sTmp1.c_str()); return *this; } }; int main() { Complex a; a = "3+4i"; a.Print(); a = "5+6i"; a.Print(); return 0; }
程序設計實習作業 02 各種構造函數和析構函數