※ 引述《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已经过世了...