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);
}