※ 引述《tatty5566 ( )》之銘言:
: ※ 引述《iLeyaSin365 (365)》之銘言:
: : C++是物件導向,比C困難吧?
: : 打開Cpp語言的程式碼
: : 我看到的不外乎質樸的for循環、
: : 列印的語法、函數、參數。
: : 雖然覺得C++看來看去就是類似的感覺,甚至比javascripts感覺更簡陋一些。
: : 好像會陡然上升墜五里霧。
: : 如果拿有C語言體質的rust相比,
: : Rust看起來好像更深奧(更多概念)。
: : 到底C++難在哪?
: 看到標題我就想問,C++是不是沒那麼適合新手學啊?
: 我資工大一上程設就C++,那時候用的是螞蟻書
: 之後不知道是我沒天分,還是教授講太爛,
: 學期中講到pointer我就聽不懂,直接斷然轉學
: 後來聽說沒程設基礎的,直接從C開始學比較容易
: 不知道是不是真的
因為螞蟻書比較像字典,不太像解釋程式為什麼要加這個變數,要加這幾行code
而語法的解釋也沒有從設計和需求出發,難以吸收...
然後很多C++書,基本上就是教你怎麼使用這個語言,而不是程式問題怎麼思考+拆解
所以大多也不是給沒學過程設的人讀的...
而我認為比較適合初學者的C++書籍如下:
(1) Beginning C++20: From Novice to Professional
https://reurl.cc/8q5dO7
(2) Problem Solving with C++ or Absolute C++
https://reurl.cc/Y8dypl
https://reurl.cc/EGXELm
(3) C++ Programming: From Problem Analysis to Program Design
https://reurl.cc/xl1nAV
(4) C++ Primer Plus
https://reurl.cc/DmXG7j
這些比較符合我說的邏輯去寫
而pointer這種東西,基本上理解方式就是從它是一個存memory address的變數
這個方向下手,然後常見的使用方式:
(1) 當你設計的function call在return時,想要把傳進的parameter改掉
eg:
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
(2) 想要一個尺寸要變動的array:
eg:
int n;
cin >> n;
int *arr = new int[n];
for(int i = 0; i < n; ++i)
cin >> arr[i];
delete [] arr;
(3) 做像linked list之類的data structure
struct Node{
int val;
struct Node *next;
};
Node *insert(Node *list, int val)
{
Node *new_node = new Node;
new_node->val = val;
new_node->next = list;
return new_node;
}
不外乎就這些
而一開始請用圖像去理解它,尤其是要理解linked list的時候
PS: Ivor Horton、Walter Savitch和D. S. Malik都是數學家
而Walter Savitch在2021已經過世了...