此篇是C++物件導向系列第三篇,看之前文章請點Day12物件導向class和Day13物件導向object
上篇Day13提到過,struct是裝variable的分類箱,而class是可以裝variable跟function的分類箱。
在class裡的function叫做method,明天會聊到。
而constructor就是一種特殊款的function。
特殊之處在於,一般來說function要被呼叫到才會執行,
Constructor小常識:
class_name(){ ...內容... }
,範例如以下:class Book{
public:
Book(){ //這個就是constructor
cout << “ 我是示範" << endl;
}
};
int main(){
Book b1;
}
console輸出: 我是示範
因為是特殊款,但骨子也是function,所以跟function一樣也可以放在class外面。Class_name::Class_name(){....}
範例如下:
class Book{
public:
string bookname, author;
Book(string bookname, string author); //這個就是constructor
};
Book::Book(string bookname, string author){
cout << bookname << ", "<< author << endl;
}
int main(){
Book b1("Cinderella", "Charles Perrault");
}
console輸出: Cinderella, Charles Perrault
}
很像function,可以用perameter操控輸入的數值。
但在這邊,輸入數值/資料的是一個在book架構下,叫做b1的“object”。
book b1("Turing's Cathedral", "George Dyson", 19.99);
//bookname //author //price
我們可以注意到每次輸入新的資訊需要下面這四行
int main(){
book b1; //呼叫一個新的object叫做b1,在book class架構下的
b1.author = "George Dyson"; //這個名叫b1的object,author是Geroge Dyson
b1.bookname = "Turing's Cathedral"; // 同上
b1.price = 19.99; //同上
輸出圖書資訊時又需要下面這三行
//以下呼叫b1的各種properties出到console
cout << "Book name: " << b1.bookname<<endl;
cout << "Author: " << b1.author<< endl;
cout << "Price: $" << b1.price<< endl;
return 0;
}
class Book{
private: //私人區域,超出這個class裡都拿不到
public: //公共區域,可以在別的class或是main裡面取用
string bookname, author; //書的這些資料用字串
float price; //書的價錢可能有小數點用float(書商很喜歡定價29.99之類的
// **下面這個就是constructor**
Book(string bookname, string author){ //注意constructor名字跟class是一樣的
this -> bookname = bookname;//告訴電腦這個perameter bookname代表b1輸入的資料bookname
this -> author = author; //告訴電腦這個perameter author代表b1輸入的資料author
} // 當parameter名字重複時要加上this->告訴電腦”這個“書名等於variable裡的書名
}
int main(){
book b1("Turing's Cathedral", "George Dyson");
book b2("Atomic hobbits", "James Clear");
book b3("Where the craward sings", "Delia Owens");
}
關於this是什麼,過幾天會仔細聊聊。
耶史,三行直接縮減成一行,而且還能在同一排加其他資訊進去。
要修改的時候也不用滑鼠滑滑滑滑超久才能找要更動的那行(眼花撩亂)。
Reference: Geeksforgeeks, Wikipedia, Google, W3School, CSDN