###### tags: `資料結構 & 演算法` {%hackmd @kk6333/theme-sty1 %} # DS2 - 資料抽象化 ADT & 物件導向程式設計 ## 1. 觀念簡介 ### 資料模組化 將每個功能分開獨立運作 > ex : 排序 Data 問題可拆成 > - Main > - 儲存 Data > - 排序 Data > - 印出 Data ### 資料抽象化 Abstract Data Types 將功能包裹起來獨立分開,在實作程式時只要使用功能進行操作即可 利用物件導向的設計,可以方便實踐此目的 :::info ![](https://i.imgur.com/igUZXl5.png) ::: --- <br> ## 2. C++ 類別 c++ 類別的使用可以分成三區塊 - **main.cpp** : 主程式,用來使用類別物件 - **myClass.cpp** : class 定義撰寫 - **myClass.h** : class 宣告 ### 1. 標頭檔 .h 這邊存放 Class 的宣告 並且會用 public、private 管理方法與屬性的存取權 - public : 可以在外部直接呼叫 - private : 只能在類別方法中被使用 > 還可以加入 #ifndef & #endif & #define 防止重複匯入標頭檔 ```cpp= // myClass.h #ifndef MYCLASS #define MYCLASS class MyClass1 { private: int money; public: MyClass1(); // 建構函數 Construstor void ShowMoney(); } #endif ``` <br> ### 2. class 定義 .cpp 檔 這邊用來撰寫 class 定義 記住要使用 `#include "myClass.h" ` 來匯入標頭檔 ```cpp= // myClass.cpp #include<iostream> #include "myClass.h" MyClass1::MyClass1(){ // 建構函數 Construstor money = 100 } void MyClass1::ShowMoney(){ std::cout << "Money: " << money ; } ``` <br> ### 3. 主程式 main.cpp 主程式可以利用剛剛建好的類別,來完成任務 :::warning :warning: **注意** : 如果你程式是建立為一個專案 (Project) 時,就直接匯入 class 的標頭檔 但如只是三個在相同資料夾下的檔案,還要再匯入 class 的 .cpp 檔 ::: ```cpp= #include "myClass.h" #include "myClass.cpp" // add when this is not a Project int main(){ MyClass1 c1; // 建立物件 cl.ShowMoney(); } ```