iT邦幫忙

2022 iThome 鐵人賽

DAY 12
0

前言與解釋有點長,只看C++規則怎麼用請直接往下滑到Class類別
閱讀此篇前請先看一下Day10結構Struct,會更理解。

前言

咳咳,來說一個小離題的事情,在寫Javascript的時候,裡面有個東西我怎麼都弄不懂,這個東西就是 --- this。
這個小東西可把我折磨慘了,雖然大致知道要把this放在哪,但就是怎麼都不懂為什麼,常常也會忘記放,debug時摸摸鼻子嘆一口氣,不知道有沒有寫JS的同志們也經歷過這個問號期。

這幾天會從class到constructor,之後會一路聊到inheritance最後是polymophsim,希望能打通任督二脈,扎實的把觀念弄清楚!(握拳。

class的用處及為什麼要用它

其實class超級簡單,就是一種多功能分類箱

以下是C++三種分類箱:

  • function作用是裝方式、作法return a+b;或是cout << "hello";等等)的分類箱。
  • Struc是放variableint, string...等等)的分類箱。
  • Class是把上面兩個都可以一起放的分類箱。

為什麼要用分類箱?

  1. 省時間
  2. 方便整理
  3. 防止工程師腰痠背痛眼睛乾

以上,就是class的用處。


沒在開玩笑,我們可以藉由上面三條發現,class很簡單(雖然看課本時看了十次也不懂到底是何用處),就是用來分類,可以節省時間,增加效率,把相似的functions、variables們裝在一起,到時候方便找,類似書籤的概念,比方說這堆都是關於書的資料作者出版社,那堆在講關於汽車的型號與顏色,分別裝在一起到時候方便找,也好維護。
(以上這堆話現在看起來可能完全沒有意義,沒關係,請繼續看下去吧)

同理,loop也是一樣的概念,雖然對電腦來說不管用loop還是一行一行code,都是一樣跑n次,但在要跑100萬次的情況下可以節省我們寫一百萬行程式碼的時間及眼睛淚液,是不是很划算。
如系列第一篇文章說的,程式的本意就是為了提高效率,人需要休息,電腦重複重複計算不會累,因此程式碼的效能好不好,維護方不方便就很重要。
越少行程式碼,電腦需要運行的次數是不是就更少了?是不是就能更省電環保救北極熊?

說起來簡直太完美了,如果電腦能自己學習調整,那該有多好,人工智慧有一派學說認為有一個演算法是能夠涵蓋所有,讓電腦能夠擁有學習思考能力“終極”的演算法,也許我們一生都沒辦法發明出一個新演算法改變世界,但學會class後“馬上”就能夠拯救我們的眼睛跟肩膀。

(關於效率跟時間,aka時間複雜度time complexity,等聊完class後想來專門開一天仔細說明,雖然這應該算是資料結購了(誤)


Class類別

一般情況下,假如當我們想要做一個家中書本資料的統計,記錄書名、作者和價錢。
然後放在C++裡面,可以怎麼做呢?
轉頭一看,書架上第一本書叫做Turing's Cathedral,作者是George Dyson,價錢19.99(忘記實際多少錢)。

#include <iostream>
using namespcae std;
int main(){
    string bookname1, author1; //書的這些資料用字串
    float price1; //書的價錢可能有小數點用float(書商很喜歡定價USD29.99之類的
    
    author1 = "George Dyson"; 
    bookname1 = "Turing's Cathedral";
    price1 = 19.99; 
    
   
    cout << "Book name: " << bookname1 << endl;
    cout << "Author: " << author1 << endl;
    cout << "Price: $" << price1 << endl;
    return 0;    
}

很好,第一本書成功輸出。
阿,還有第二本,怎麼辦?
每本書都declare各自的書名、作者、價錢,然後放進去,bookname2, bookname3....author2, author 3.....price2, price3.....
這樣總共要打幾行variable?

一本書需要三個variable,加上輸出三行輸入三行,9行。
假設有150本書,9 * 150 = 1350行...

好消息,我們明天會來仔細聊聊有個方法可以省略這個冗長的過程,以下是範例:

#include <iostream>
class book { //class本人在這,現在他被我設定叫做book
private: //私人區域,超出這個class裡都拿不到
public: //公共區域,可以在別的class或是main裡面取用
    string bookname, author; //書的這些資料用字串
    float price; //書的價錢可能有小數點用float(書商很喜歡定價USD29.99之類的
}
int main(){
    book b1; //製作一個新的object叫做b1(第一本書)
    b1.author = "George Dyson"; //在b1這個object裡作者是Dyson
    b1.bookname = "Turing's Cathedral"; //b1的書名為Turing's Cathedral
    b1.price = 19.99; //同上 //b1的價錢為19.99
    
    //以下呼叫b1的各種properties出到console
    cout << "Book name: " << b1.bookname<<endl;
    cout << "Author: " << b1.author<< endl;
    cout << "Price: $" << b1.price<< endl;
    return 0;
}

等等,什麼是book b1 object?
沒關係因為這篇只是物件導向第一篇而已,明天會專門來認識他。
請搭直通車Object物件


上一篇
Day11 - C++好簡單之來做一個ATM系統吧! switch和do..while
下一篇
Day 13 - C++ 物件導向2 - 物件object
系列文
C++超級菜鳥也可以懂的物件導向攻略30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言