1. 程式人生 > >程序設計實習作業 02 各種構造函數和析構函數

程序設計實習作業 02 各種構造函數和析構函數

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 namespace
std; 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 各種構造函數和析構函數