C++普及组进阶核心难点
一、内存管理:
上周写成绩管理系统时,老师说new和malloc都是"申请内存空间"的,但用起来差好多!
new像自动组装玩具:比如创建Student对象时,Student* s = new Student();会自动调用构造函数(就像玩具自带说明书,自动拼好),用完记得用delete s;销毁(不然空间占着不还,电脑会变卡)。
malloc是手动搭积木:int* arr = (int*)malloc(5sizeof(int));只是要了块空地,里面全是乱码,得自己初始化(比如arr[0] = 0;),用完用free(arr);还回去。
⚠️ 踩坑经历:之前用new[]创建数组(int a = new int[10];),结果用delete a;释放,被老师骂了——必须加[]!不然会"内存泄漏"。
二、引用:
引用就像给同桌起外号,一旦叫了就不能改!
必须马上"认亲":int a = 10; int& b = a;(b是a的外号),不能先声明int& b;再赋值(就像不能先说好要起外号,却不告诉是谁的)。
改外号=改本人:b = 20;其实是a变成20(同桌外号被老师批评,等于本人被批评)。
不能给"空气"起外号:int& c = nullptr;会直接崩溃(就像给不存在的人起外号,系统 confusion 了)。
好处:函数传参时用引用,比如void add(int& x),修改x会直接影响外面的变量*,不用复制一大块数据(省时间!)。
三、const:
const就像给笔记本贴"禁止涂改"标签,有3种方法:
锁内容:const int score = 90;(score永远是90,改了就报错,适合存固定值比如π=3.14)。
锁指针指向的内容:const int* p = &score;(p可以指向别人,但不能改score的值,就像只能看别人的笔记本,不能涂画)。
锁指针本身:int* const p = &score;(p只能指着score,不能换目标,但可以改score的值,就像只能看自己的笔记本,但可以涂改)。
老师说:别用#define N 2+3!宏替换会坑人(比如N2会变成2+32=8,而const int N=5就不会错)。
四、运算符重载:
比如定义一个Vector结构体(表示坐标x,y),想直接用+号相加,就得教它怎么做:
⚠️ 血的教训:千万别返回局部变量的引用!比如Vector& operator+(){ Vector tmp; return tmp; },tmp用完会被销毁,引用就成了"空壳子"(就像借别人的作业抄,结果原主人把作业撕了)。
PS:这些都是我刷题总结的,可能有点啰嗦,如果有错误,欢迎大佬指出!