第十一章 物件導向封裝(二)

建構子(Constructor)

建構子為類別中的特殊方法, 具有如下的特性
1. 當物件生成時, 會自動執行. 通常用來作初始化物件. 此方法因會自動執行, 故一定是public(也有例外)
2. 其方法名稱和類別名稱一模一樣。
3. 而且沒有傳回值, 甚至連void都沒有.
4. 如果沒有宣告自訂建構子, 編譯器會自動建立預設建構子.
5. 如果有自行定義建構子,則不會自動產生預設建構子, 需自行撰寫

class Car{
    private:
    int speed;
    public:
    /*
    Car(){
        speed=0;
    }
    */
    Car(int speed){
        this->speed=speed;
    }
    int getSpeed(){
        return speed;
    }
};
int main(){
//    Car *car1=new Car();此行會在編譯時指出錯誤
    Car *car2=new Car(50);
    printf("Car speed : %d\n", car->getSpeed(50));
}

解建構子(Destructor)

當物件結束時,通常需要清除記憶体,關閉檔案,就需此解建構子

public:
    ~Car(){
}

如下範例說明
class Car{
    private:
    int speed;
    public:
    Car(int speed){
        this->speed=speed;
    }
    int getSpeed(){
        return speed;
    }
    ~Car(){
        printf("執行解建構子\n");
    }
};
int main(){
    Car *car1=new Car(50);
    printf("Car speed : %d\n", car1->getSpeed());
    delete car1;
}

static

static 方法及變數,不需要建立物件就可以使用,不可操作任何物件變數。當物件消失後,此static依然存在。

class MyMath{
    public:
    static int factorial(int x, int y){
        if (x>y || x<0)return -1;
        if (x==0)x=1;
        if(x<y)return x*factorial(x+1, y);
        else return y;
    }
};
int main(){
    printf("%d\n", Math::factorial(0,5));
    system("pause");
    return 0;
}

static 方法不可使用非static 方法或變數

class Test{
    public:
    int speed=10;
    static int test{
        return speed;//此行會出錯,因test在程式一執行就存在,但speed需到new才會出現
    }
};

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *