iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
Software Development

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

Day18 C++物件導向5 - Encapsulation封裝

  • 分享至 

  • xImage
  •  

之前四篇物件導向類別Class物件Object建構子ConstructorDay 15 - C++ 物件導向4 - Method與Function歡迎接續觀看

前言:
物件導向包含三個重點觀念,Encapsulation封裝、Inheritence繼承和Polymorphism 。

複習一下之前說過class有兩種區域:

  • private:只能在class內取用,外面拿不到。
  • public:可以在程式的任何地方取用。

其實還有叫做protected的區域

  • protected: 只可以被繼承的class拿取,外面拿不到,是”繼承inheritance“專用。

關於繼承是什麼,過幾天天會專門說明。


Encapsulation封裝,如其名,就是一種把”不能被亂碰“的資料藏起、包裝起來不會隨意碰觸、影響到的。
藏在class裡,一個保險箱的概念~

這一篇Day16物件導向應用提到的,把variable放在private。

這就叫做encapsulation~

  • 把資料variable放在private裡面
  • 用放在public裡面的method來操作資料

來看看範例吧:

class Car{
private:
    int price;
    string colour, brand, model;
public:
    void setColour(string c){
        colour = c;
    }
    string getColour(){
        return colour;
    }
};
int main(){
    Car c1;
    c1.setColour("Yellow");
    cout << c1.getColour() << endl;
    return 0;
}

什麼時候用

例如在公司裡有不同部門,當一名財物進入系統後進入財務系統,業務進入業務系統,如果會計有權限進入業務系統有可能會讓業務的工作出現問題,反之也是有可能,所以我們需要用到這個概念,把權限、資料封起來。
可以把variable藏在private中不會互相打到

class Sales{
private: ......

public:
    void info(){
          cout << "welcome to Sales Dept";
    }
};

class Accounting{
private:
          ....
public:
       void info(){
           cout << "welcome to accounting Dept";
       }


};

int main(){
    Sales s;
    Accounting a;
    int x;
    cout << "Enter your department: 1.Sales 2. Accounting" << endl;
    cin > x;
    if(x == 1){
        s.info();
    }else a.info();
       
}

Reference: geeksforgeeks, tutorialpoint, w3cshool, Google


上一篇
Day17 C++ Reference & Pointer 指標
下一篇
Day19 - C++ 資料流stream 和文字檔讀取file I/O
系列文
C++超級菜鳥也可以懂的物件導向攻略30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言