iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0
Software Development

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

Day 13 - C++ 物件導向2 - 物件object

  • 分享至 

  • xImage
  •  

關於class類別是什麼和為何要用他請搭直通車Day07Class類別
目標:要把我房間的書做個統計,總共有150本。
(第一版本土法煉鋼法的code請點上面直通車。)

前言:
想當初看書的時候看到這一章,仔細每個字都看完信心滿滿地覺得“我會了”,然後要開始碼code時又瞬間腦袋空白。
其實class超級簡單,就是一種多功能分類箱

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

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

來複習一下昨天的精美的升級版code - 開始用到class

#include <iostream>
class book { //class本人在這,現在他被我設定叫做book
private: //私人區域,超出這個class裡都拿不到
public: //公共區域,可以在別的class或是main裡面取用
    string bookname, author; //書的這些資料用字串
    float price; //書的價錢可能有小數點用float(書商很喜歡定價29.99之類的
};
 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;
    }

那個book b1是什麼? object又是什麼?

Object就是物件本人,那個b1就是一個object

我們開了30天挑戰就是要跟這位”物件“打好交情,發展出溫暖深厚的友誼。

variable是什麼呢?
就是跟電腦說“嘿,幫我在記憶體那邊空出一些空間,我要放東西,謝謝。”
例如打int age = 5;,等於跟電腦說,哈囉,幫我空出一個4 bytes的地方,這個空間叫age,裡面放5這個數字。
如果還不知道要放什麼,也可以打int age;,跟電腦說我還不知道放什麼,請幫我清出一個4 bytes空白叫做age的空間,等等再決定放什麼。

Object也是一樣的概念,哈囉電腦,我這有一些新的東西需要空間放,幫我清個叫做b1的空間出來,空間取決於class裡面放的東西的多寡,可以用sizeOf(class名字)來看看class有多大。

有趣的是,在我們蓋好class以後,不管有多雄偉壯觀多少條code,電腦都不會清出記憶體空間給class放,要等object創建以後,才會整理出空間開始執行動作。

就像單純只寫variable,例如string;給電腦也不會有反應,至少得貼上名字,例如string colour;才會清出空間。

這就清晰的解釋了class到底是什麼,本質就是一個骨架,一個空白已經有線條的著色本(前幾年很夯的秘密花園那種著色本),沒有內容物的時候是沒有被激活的,只要填入數值資料/在框框內填上色彩就會活起來。

所以
class = 骨架
object = 內容+名字。


小總結

用object代替每本書都要分別declar三次variable(書名、作者、價錢)的這個方法看起來更整齊了,但沒有節省很多行的感覺,沒事兒,這是為了要聊聊constructor所需要的基礎。

有沒有方法更方便的方法輸入150本的圖書資訊?

是滴,Constructor可以簡化這個步驟

明天接續來聊聊constructor。

Reference: Geeksforgeeks, Wikipedia, Google


上一篇
Day 12 - C++ 物件導向1 - 類別Class
下一篇
Day14 - C++ 物件導向3 - Constructor 建構子/建構函數
系列文
C++超級菜鳥也可以懂的物件導向攻略30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言