iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0
Software Development

C++超級菜鳥也可以懂的物件導向攻略系列 第 14

Day14 - C++ 物件導向3 - Constructor 建構子/建構函數

  • 分享至 

  • xImage
  •  

此篇是C++物件導向系列第三篇,看之前文章請點Day12物件導向classDay13物件導向object

上篇Day13提到過,struct是裝variable的分類箱,而class是可以裝variable跟function的分類箱。

在class裡的function叫做method,明天會聊到。

而constructor就是一種特殊款的function。
特殊之處在於,一般來說function要被呼叫到才會執行,

而constructor是會”自動執行“。


Constructor小常識:

  • 當object被建立的時候,會自動呼叫constructor,如果沒有自定義,會呼叫預設default constructor(空白的)。
  • 沒有return value
  • 一定是在public裡,在class外面可以取用
  • constrctor的格式,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

}

繼續之前的150本書目標

很像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


上一篇
Day 13 - C++ 物件導向2 - 物件object
下一篇
Day 15 - C++ 物件導向4 - Method與Function
系列文
C++超級菜鳥也可以懂的物件導向攻略30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言