---
# System prepended metadata

title: C++ Primer 5th Chapter 1
tags: [C++ Learning]

---

# C++ Primer 5th Chapter 1
###### tags: `C++ Learning`
這系列的筆記是想寫給自己看的C++學習記錄
> 因為我自己有點程式的基礎，但是自認對程式架構不甚瞭解，所以才決定接受朋友建議來硬啃這本聽說是神書的。

我有學過基礎的 C 然後會打點 python，但對 C++ 是完全陌生，希望能透過這樣的方法督促自己學習，也希望幫到某個剛好看到這份筆記的人。

我紀錄的方法應該是對我覺得重要的內容筆記，然後把我寫的作業習題放上來，如果有什麼其他的發現也會補充在這上面。

## 1.1我目前認為 C++ 是由一連串的 function 構成程式
>原文： C++ 程式都包含一個以上的 function，其中一個一定要命名為 main

```cpp=
int main(){
    return 0;
}//一個只會回傳0的主函式
```
系統呼叫程式時，會以`main`中的內容為主要執行內容，如果`main`有使用到其他函數才會在呼叫。
`int`代表這個函式的型別(type)是一個整數（也就是將會回傳整數），通常`main`回傳的值會當成**狀態指示**（也就是這個程式的執行結果）。
### 1.1.1編譯
當寫好一個程式存檔後，檔名例如是 : practice.cpp。這時就可以用 Terminal 對程式進行編譯（我用的是macos，使用g++編譯)
```typescript=
g++ -o a practice.cpp
```
也可以是
```typescript=
g++ practice.cpp -o a
```
==補充==
- `practice.cpp` 是要被編譯的檔名
- `a`是編譯完後產生的檔案的檔名
- 如果 `-o a`不打，預設檔名是`a.out`

編譯完後執行
```typescript=
./ a
```
執行完成後可以確認狀態
```typescript=
echo $?
```
如果是在windows可以用
```typescript=
echo %ERRORLEVEL%
```

#### 習題章節
如果把回傳改成`-1`會發生什麼事？
```cpp=
int main() {
    return -1;
}
```
>ANS: 使用`echo $?`確認後，回傳值為255
## 1.2輸入輸出 : C++的 cout<< 與 cin>>
C++ 使用 iostream 函式庫來處理輸入和輸出(資料流），資料的型態是字元序列 ( a sequence of characters)。
### 標準輸入(standard input)與標準輸出(standard ouput)
應該就和Ｃ的 scanf 和 printf 或是 python 的 input 和 print 差不多，主要用來處理鍵盤輸入與螢幕輸出。
使用前要記得引用`iostream`函式庫，用之前也要使用`std::`代表他是來自標準函式庫的函數（方法）
```cpp=
#include <iostream>

int main() {
std::cout << "Enter two number, please"<<std::endl
//使用標準函式庫的output輸出"Enter two..."這個字串
//接著再輸出std::endl這個換行的
int num1, num2 = 0;
std::cin>>v1>>v2;
std::cout<< "The sum of" << num1 << "and" << num2 << "is" << num1 + num2
return 0;
}
```
1. 使用std::cout輸出想要的資訊並且換行
2. 宣告兩個整數用來儲存輸入
3. 把讀到的兩個整數放入 num1 和 num2
4. 印出想要的資訊

`<<`是運算子，把右手邊的值傳給左手邊的 ostream 物件
（應該可以想成把右邊的運算元傳給左邊的運算元）
`>>`是輸入用的運算子，把左手邊的instream 輸入給右手邊的物件
==補充==
1. `std::cout<<"Plese enter a number" << std::endl;
可以改寫成`
```cpp=
std::cout<<"Please enter a number";
std::endl;
```
2. `//`後方的字是註解，不會被執行
#### 習題章節
>寫一個城市在標準輸出印出 Hello, World
```cpp=
#include <iostream>
int main(){
    std::cout<<"Hello, would";
    return 0;
}
```
>使用`*`運算子印出乘積
```cpp=
#include <iostream>
int main(){
    std::cout<<"Enter two number"<<std::endl;
    int num1, num2 = 0;
    std::cin>> num1 >> num2 ;
    std::cout<<"The product of two number is " << num1 * num2<<std::endl;
    return 0;
}

```
>檢查下列程式是否合法
>- std::cout << "Input number is " << v1;
>            <<" and " << v2;
            ><< std::endl;
            >
不合法，因為有分號出現了，應該要改成
>- std::cout << "Input number is " << v1;
>  std::cout <<" and " << v2;
>  std::cout << std::endl;
## 1.3 註解的用法
註解可以增加程式的可讀性，也方便記錄當時的想法和修改過程。或是可以先用註解把可能出錯的程式片段消除來找 bug 在哪裏。
註解有分單行的`//`和多行的`/* */`，使用上可以想成`//`的優先度大於`/**/`
```cpp=
// 在單行註解後方的新註解/*４５６４５６４６*/也不會生效
/*多行註解像是這樣
 * 第二行
 * 第三行
 */
 int a = 1;
```
使用`/**/`要小心以下範例
#### 習題章節
1. >std::cout << "/*"
正確，會印出 `*`

2. >std::cout <<"*/"
正確，會印出`*/`

3. 
```cpp=
>std::cout << /*"*/" */;
```
應該改成
```cpp=
std::cout << /* "*/" */";
```
會印出 `*/`
