[C/C++]OOP筆記01

Arthur
Oct 17, 2020

--

Constructors使用技巧

1. Constructors 與 Destructors

在設計一個class,會產生Constructors與Destructors,如果在class中沒有寫關於Constructors與Destructors,則會自動Default產生空的,執行完與下面的程式碼一樣的結果。

class Player{
private:
string name;
int age;
public:
Player(){} #Constructors
~Player(){} #Destructors
string set_name(string name_val);
int set_age(int age_val);
}

2. Overloading Constructors

每個Class只會有一個Destructors,但可以宣告很多種Constructors,使用時根據不同狀態能呼叫不同Constructors

class Player{
private:
string name;
int age;
public:
Player(){
name = "None";
age = 0;
}
Player(string name_val){
name = name_val;
age = 0;
}
Player(string name_val, int age_val){
name = name_val;
age = age_val;
}#Overloading Constructors
~Player(){} #Destructorsstring set_name(string name_val);
int set_age(int age_val);
}

3. Constructors initialization list

將Constructors 初始值設定有更簡潔的寫法,使用initialization list

class Player{
private:
string name;
int age;
public:
Player()
:name{"None"},age{0}{
}
Player(string name_val)
:name{name_val},age{0}{
}
Player(string name_val, int age_val)
:name{name_val},age{age_val}{
}#Constructors intial list
~Player(){} #Destructorsstring set_name(string name_val);
int set_age(int age_val);
}

4. Delegating Constructors

使用代表性的Constructors減少程式碼,但要注意所有宣告都會呼叫到代表性的Constructors,所以要注意自己的應用是不是也符合這樣的邏輯。

下面的程式碼中Player()與Player(string name_val)其實都會去呼叫Player(string name_val, int age_val)也就是Delegating Constructors,所以不論今天在main裡使用0個變數或1個變數,黑窗都會顯示test的字樣。

class Player{
private:
string name;
int age;
public:
Player()
:Player{"None", 0}{
}
Player(string name_val)
:Player{name_val, 0}{
}
Player(string name_val, int age_val)
:name{name_val},age{age_val}{
cout<<"test"<<endl;
}#Delegating Constructors
~Player(){} #Destructorsstring set_name(string name_val);
int set_age(int age_val);
}

5. Default Value

在某些應用下可以使用Default value,使得程式碼更精簡,需要測試的程式碼越少,出錯機率越低。

class Player{
private:
string name;
int age;
public:
Player(string name_val = "None", int age_val = 0)
:name{name_val},age{age_val}{
}#Delegating Constructors
~Player(){} #Destructorsstring set_name(string name_val);
int set_age(int age_val);
}

--

--

Arthur
Arthur

Written by Arthur

Cooking, Coding and Reading

No responses yet