Research Showcase

教研端展示中心

展示主题C++ 类与对象课件 · 讲解 · 实验 · 练习

教学成果展示

微课课件教师讲稿实验任务练习题学生讲义

教研端不直接生成文件,主要用于聚合展示教师端导出的课程成果和学生端学习资产。

技术链路展示 / C++ 专项生成模块

  • artifact / meta / revision 贯穿生成、预览、反馈修改。
  • task 状态覆盖 pending / running / completed / failed。
  • C++ 专项模块包含 code_explainer / experiment / practice / error_analysis。
  • 导出成果来自 export_payload + export_files。

课件预览

C++ 类与对象v1 · 共 10
Slide 1cover

C++ 类与对象

  • 微课主题:在《程序设计基础》语境下建立面向对象的第一套心智模型——类是自定义类型,对象是这种类型的变量。
  • 教学线索:从“学生信息表”这一熟悉场景抽象出属性与操作,再映射到 class、对象与成员访问。
  • 课堂组织:概念铺垫 → 语法骨架 → 完整代码走读 → 典型错误 → 动手实验 → 分层练习,约 45 分钟。
  • 贯穿示例:Student 类;强调读代码顺序与调试习惯,而非死记语法条目。

教师提示:开场 2 分钟用提问热身:没有类之前,你们怎么在程序里表示“学生”?引导说出结构体/多个变量/数组,再指出“把数据和对数据的操作绑在一起”更自然,引出 class。板书左侧画信息表,右侧画 class Student 的框图,告诉学生本节课结束时他们要能指着代码说出哪一行在声明类型、哪一行在造对象、哪一行在发消息(调用方法)。

学习提示:把本节课想成学会读一份“迷你说明书”(类)和按说明书造东西(对象)。

本页参考资料Refs
  1. course《C++ 程序设计基础》 — 类与对象
  2. bookC++ Primer(第 2 部分)(类定义与封装)

参考资料(view_model · artifact 对照)

view_model · 本页Refs

第 1 页 · view_model.slides[*].references

  1. course《C++ 程序设计基础》 — 类与对象
  2. bookC++ Primer(第 2 部分)(类定义与封装)
artifact · 本页Refs

第 1 页 · artifact.slides[*].references

  1. course《C++ 程序设计基础》 — 类与对象
  2. bookC++ Primer(第 2 部分)(类定义与封装)
view_model · 全课Refs
  1. course《C++ 程序设计基础》 — 类与对象
  2. bookC++ Primer(第 2 部分)(类定义与封装)
  3. rag_chunkrag_chunk
    chunk_id: mock-concept-1
    来源:mock://cpp/class_object/concept · 相关度:0.9
  4. rag_chunkrag_chunk
    chunk_id: mock-concept-2
    来源:mock://cpp/class_object/concept · 相关度:0.85
  5. bookC++ Primer
  6. internal本校实验指导书 — 类与对象实验
artifact · 全课Refs
  1. course《C++ 程序设计基础》 — 类与对象
  2. bookC++ Primer(第 2 部分)(类定义与封装)
  3. rag_chunkrag_chunk
    chunk_id: mock-concept-1
    来源:mock://cpp/class_object/concept · 相关度:0.9
  4. rag_chunkrag_chunk
    chunk_id: mock-concept-2
    来源:mock://cpp/class_object/concept · 相关度:0.85
  5. bookC++ Primer
  6. internal本校实验指导书 — 类与对象实验

代码讲解

语法:类的基本定义格式C++
  • 末尾缺少分号导致后续代码被误解析
  • Public/private 拼写错误
  • 在类定义体内忘记访问说明符导致默认 private(对 class)

错误分析

语法:类的基本定义格式第 6 页
class Student {
public:
    std::string name;
    void sayHello();
};
// sayHello 可在类外定义:void Student::sayHello() { ... }
C1

末尾缺少分号导致后续代码被误解析

C2

Public/private 拼写错误

C3

在类定义体内忘记访问说明符导致默认 private(对 class)

教师提示

板书时把 public: 用彩色标出。对比漏写分号的错误截屏(与本课错误分析页呼应)。若班级进度快,可一句带过:成员函数可在类外写 Student:: 限定名。

学习提示

写类时先敲好 `};` 再写 main,可减少一半低级错误。

实验任务

设计并使用 Student 类(封装 · 构造 · 输出)第 9 页
实验步骤

暂无

思考题

暂无

拓展任务

暂无

教学目标:通过本实验,学生应能独立使用 class 定义含 private 数据成员与 public 构造/showInfo 的 Student 类;理解初始化列表在建立对象初始状态中的作用;掌握在 main 中正确创建对象并调用成员函数输出两行信息;并能口头说明“类声明—对象定义—成员访问—return 0”与常见编译/链接错误之间的对应关系。本实验为纸面或本地 IDE 练习,不进行在线判题。 前置:已理解 class 与对象的基本词汇:类是类型、对象是变量实例 | 知道 public / private 的课堂级含义:谁能用点运算符访问成员 | 能读懂带参数的构造函数调用形式:`Student stu("Bob", 20);` | 熟悉 iostream 与 string 头文件及 std:: 前缀(或教师允许的 using 写法) | 能在 main 中写出 return 0 并理解其为进程正常结束约定(本实验不评测在线运行) 预期输出:在本地或纸面推演时,控制台应连续输出两行(换行两次),例如: 姓名:Alice 年龄:18 第二组测试数据示例:将构造参数改为 ("李华", 19) 后,应输出: 姓名:李华 年龄:19 若输出顺序颠倒或缺少标签文字,应检查 showInfo 中 cout 字符串是否与上述格式一致。 操作主线:阅读实验标题与目标:明确要完成一个《C++ 类与对象》语境下的 Student 类,并在 main 中创建对象、调用 showInfo 输出信息。 → 搭建工程文件结构:新建单个 .cpp(或按教师要求拆分 .h/.cpp),在顶部准备 `#include <iostream>` 与 `#include <string>`。 → 书写 `class Student {` 骨架:先写访问说明符分区注释,再决定 name、age 放在 private,对外接口放在 public。 → 在 private 区声明 `std::string name;` 与 `int age;`,口头解释“状态藏在内、接口露在外”的封装意图。 → 在 public 区声明构造函数 `Student(std::string n, int a);` 并在类内或类外实现:用初始化列表 `: name(...), age(...)` 绑定参数到成员。 → 实现 `void showInfo() const`:用 std::cout 分行输出“姓名:”“年龄:”,字符串字面量与样例 expected_result 对齐。 → 编写 `int main()`:使用 `Student stu("Alice", 18);` 创建对象(注意勿写成 `Student stu();`),然后调用 `stu.showInfo();`。 → 在 `return 0;` 前自查:类定义是否以 `};` 结束;是否所有 public/private 关键字小写;构造函数参数类型与成员是否一致。 → 对照 expected_result 在纸面或 IDE 上推演输出;再尝试把姓名、年龄改为自己的测试数据,观察两行输出是否随之变化。 → 实验报告:记录一条真实遇到或故意插入的错误(如缺分号、误用空括号),写出 fix 要点与对应规则编号(可与错误分析课呼应)。
参考代码
#include <iostream>
#include <string>

// 实验参考代码:定义 Student、private 成员、public 构造与 showInfo,在 main 中创建并输出(课堂纸面/IDE 练习,不做 OJ)
class Student {
private:
    std::string name;
    int age;
public:
    Student(std::string n, int a) : name(n), age(a) {}
    void showInfo() const {
        std::cout << "姓名:" << name << std::endl;
        std::cout << "年龄:" << age << std::endl;
    }
};

int main() {
    Student stu("Alice", 18);
    stu.showInfo();
    return 0;
}
教师提示

实验课建议两人一组:一人敲类,一人敲 main,互换角色找错。教师巡视重点看构造函数初始化列表与 `Student stu();` 误用。 前置知识检查:已理解 class 与对象的基本词汇:类是类型、对象是变量实例;知道 public / private 的课堂级含义:谁能用点运算符访问成员;能读懂带参数的构造函数调用形式:`Student stu("Bob", 20);`;熟悉 iostream 与 string 头文件及 std:: 前缀(或教师允许的 using 写法);能在 main 中写出 return 0 并理解其为进程正常结束约定(本实验不评测在线运行) 实验思考题 1:为什么把 name、age 放在 private 比全部 public 更符合本实验“封装”目标?

学习提示

实验报告至少包含:预期输出截图或文字、遇到的一个错误、你如何修的。

练习题

总结与分层练习第 10 页 · 6
Q1选择题choicebeginner

《C++ 类与对象》中,下面哪一句最准确地描述“对象(object)”?

  • 对象是类的实例,在运行期占据各自的存储空间
  • 对象是 C++ 关键字,必须写成 object
  • 对象只能在另一个类的成员函数里创建
  • 一个类在整个程序中只能存在一个对象
参考答案

对象是类的实例,在运行期占据各自的存储空间

解析

类是类型说明;用类名定义的变量才是对象。同一 Student 类可以创建多个独立对象。

Q2简答题short_answerbeginner

为什么类定义的右花括号 `}` 后通常必须写分号?请结合“声明语句”说明。

参考答案

类定义整体是一条声明语句,分号表示声明结束;省略会让编译器把后续声明粘连进类体。

解析

可与 `int x;` 类比:class/struct 声明了新类型,语法上同样需要语句终止符。

Q3读程序code_readingbeginner
阅读下列 Student 相关代码,程序运行后控制台输出什么?

#include <iostream>
#include <string>
using namespace std;
class Student {
public:
    string name;
    int age;
    void showAge() { cout << age << endl; }
};
int main() {
    Student s;
    s.name = "Bob";
    s.age = 20;
    s.showAge();
    return 0;
}
参考答案

20

解析

main 中设置 s.age 为 20,showAge 输出 age 并换行,故单独一行整数 20。

Q4改错/调试debuggingbeginner

下面《类与对象》课堂示例代码存在多处典型错误,请列出修正点(不要求在线提交)。

参考答案

修正点:① `Public` → `public`;② 类定义末尾 `}` → `};`;③ `Student stu();` 为函数声明陷阱,应改为 `Student stu;` 或 `Student stu{};` 以创建对象。

解析

关键字区分大小写;类声明以分号结束;无参对象不要用空括号以免 most vexing parse。

Q5编程programmingbeginner
编程题(纸面或本地 IDE,不要求在线判题):定义 Student 类,含 private 成员 name(string)与 age(int),提供 public 构造函数初始化二者,并提供 showInfo() 打印“姓名:… / 年龄:…”。在 main 中创建一名学生并调用 showInfo。
参考答案

参考要点:class 与 `};`;private 数据 + public 构造与 showInfo;main 中用带参构造 `Student stu("A",18);`,避免 `Student stu();`;不声称在线 OJ 已接入。

解析

评分侧重封装与语法正确性;可在课堂展示优秀纸面答案,不要求自动评测。

Q6选择题choicebeginner

下列哪种写法最可能触发“最令人困惑的解析”(把对象声明当成函数声明)?

  • Student stu();
  • Student stu;
  • Student stu{};
  • Student stu("A", 1);
参考答案

Student stu();

解析

无参时一对圆括号会让编译器优先解析为函数声明;应改用无括号或花括号初始化。

教研价值总结

将课件、代码讲解、错误分析、实验任务和练习题沉淀为一组可复用教学资产,支撑课程共创、课堂演示、课后复习与教研评估。

可复用教学资产课堂闭环比赛展示