01 考前必备:看到题,手先动起来
这一页不讲大道理。它只回答一个问题:卷子发下来后,我第一眼该圈什么、第二步该写什么、卡住了该怎么救。
输出题
一、运行结果题:先在代码旁边打标记
1
先找 main(),别从 class 开始硬读
类定义像演员名单,真正演出从 main() 开始。先看谁被创建、谁被调用、谁被 delete。
2
看到对象声明,就在旁边写“出生”
比如 Dog d;。如果 Dog 继承 Animal,就先写父类输出,再写子类输出:先父后子。
3
看到 =,马上问:这是造新对象还是给旧对象赋值?
Animal a = d; 是“用 d 造一个新 a”,走拷贝构造;不是普通赋值。派生类塞进基类对象,还会对象切片。
4
看到函数参数,先看有没有 &
有 & 通常不拷贝,像给原对象起外号;没有 &,按值传参,可能多一次拷贝构造。
5
看到函数调用,先看前面有没有 virtual
虚函数看真实对象,非虚函数看声明类型。简单记:虚函数看“身份证”,非虚函数看“工作牌”。
6
最后统一处理析构:函数结束、main 结束、delete
局部变量退场是倒序;继承析构是先子后父。别一边读一边乱写,最后集中收尾更不容易漏。
考场动作
输出题不是“看懂整份代码再写答案”。是先把每个会输出的点圈出来,然后按时间顺序排队。
第7-33题
二、选择题:先找关键词,再排除废话
做选择题时脑子里这样念
题目问“哪个正确”,先圈关键词;题目问“哪个不能”,先找特殊例外。不要一上来读四个选项读到失忆。
| 题号 | 看到关键词 | 立刻想什么 | 答案 |
|---|---|---|---|
| 第7题 | 构造函数 / 什么时候调用 | 对象一声明,它就“出生”,构造函数马上响。 | A |
| 第8题 | const 函数 / 正确声明 | 保护对象不被改,const 放在函数括号后面。 |
C |
| 第9题 | this 访问成员 | this 是指针,指针访问成员用箭头 ->。 |
A |
| 第10题 | 不能重载 | 三目运算符 ?: 很特殊,别碰它。 |
C |
| 第11题 | new 返回什么 | new 做两件事:开内存 + 创建对象;最后给你一个指针。 |
A |
| 第12题 | 什么时候拷贝构造 | 用旧对象造新对象、按值传参、按值返回,都可能拷贝。 | D |
| 第13题 | 不是成员函数 | 友元函数像“拿了通行证的外人”,不是类成员。 | C |
| 第14题 | inline | 内联像把小函数复制到调用处,可能更快,也可能让代码变大。 | D |
| 第15-16题 | 抽象类 / 纯虚函数 | 有纯虚函数就是抽象类;纯虚函数写法是 virtual ... = 0;。 | D / C |
| 第18题 | 拷贝构造参数 | 必须用引用,不然传参又要拷贝,会无限套娃。 | C |
| 第19题 | 运行时决定调用谁 | 看到“运行时决定”,选 Dynamic binding。 | C |
| 第21题 | 指针赋值 | 子类地址可以给父类指针;父类地址不能硬塞给子类指针。 | B |
| 第29题 | 引用 vs 指针 | 引用不能为空,绑上不能换,不用写 * 解引用。 | D |
| 第31-33题 | 静态成员 / 引用返回 / 模板 | 静态成员全班共享;引用返回能当左值;模板自动推类型。 | B / D / B |
实操规则
选择题别只记字母。至少要知道题干在问哪个概念、正确选项为什么对。完整第7-33题见 03 页。