---
# System prepended metadata

title: OOP midterm
tags: [111-1學校上課]

---

###### tags: `111-1學校上課`
# OOP midterm
## OOP定義
```
將參數以及方法封裝成物件或類別進行操作
他會有兩個部分組成:
1. State(Data)存放物件的變數
2. Behavior(Method)描述處理事情的方法

並且我們這個過程中需要(Encapsulation​)封裝
interface(接口介面)負責告訴我們所有的功能

有兩種方法類型:
1. public 可以直接存外部呼叫
2. private 外部無法呼叫，但內部可以屋較


class是可以繼承的，我們可以將許多東西的公通性寫成物件，實現
就如同:
人 , 狗 , 貓 三種不同物件
但他們都是動物，而動物都會移動或進食，那我們只要為各自定義好
動物會移動也會進食，就不能將物件規整


OOP 也擁有polymorphism(多形)，簡單來說可以依照輸入的參數數量or輸入的參數資料，改變型態 
over-riding(同方法名稱，不同行為模式)
over-loading(通方法名稱，不同參數，不同行為模式)
```
## 基本C++
### namespace 命名空間
簡單來說，就是國名，就如同我在台灣也開了一個 CNN，但美國也有一個CNN那該如何區分，我就可以利用國家進行區分，這就是namespace的用途
```cpp=
using namespace std;
using std::cin;
using std::cout;
using std::endl;
```
若想讓特定區域使用特定namespace的話，可以如下
```cpp=
{
    using namespace "You Want";
    我要執行的code
}
```
### 運算浮優先度
![](https://i.imgur.com/fvE1Pq9.png)
![](https://i.imgur.com/3TXNFEv.png)
![](https://i.imgur.com/FNI0UmO.png)
![](https://i.imgur.com/07kQsM3.png)
### enum列舉
資料會得到，從上而下的順序，可設定數值
```cpp=
//強列舉
enum class Color{
    Red,
    Greed,
    Bule
};
//列舉
enum Color{
    Red,
    Greed,
    Bule
};
```
### file io
```cpp=
string read = ""
fstream inputstream;
inputstram.open('test.txt')
inputstream >> read;
cout<<read;
```
```cpp=
string read = ""
ostream outstream;
outstram.open('test.txt')
outstream << read;
outstram.close();
```
## 重複繼承問題
可以使用一下方法
```cpp=
#ifndef 名稱
#define 名稱
會重複繼承的物件
#endif
```
### 新增/刪除動態資料
```cpp=
int * p = new int(100); //可以使用new關鍵字生成
int * p = new int[100]; //可以使用new關鍵字生成
int * p = new int[3]{1,2,3}; //可以使用new關鍵字生成

delete p;//刪除單一
delete [] p;//刪除連續
```
### 參數類別
```cpp=
int *設為參數類別，他只會傳指標進 
int &設定參數類別為參考，就會直接影響到輸入
```
