学习C++编程语言是一个循序渐进的过程。以下是一个为期三个月的学习计划,每周约15小时,旨在帮助你从基础入门,逐步掌握C++的核心概念和高级特性。
第一个月:基础语法与概念
第1周
- 教材:选择一本经典的C++教材,例如《C++ Primer》或《C++程序设计语言》。
- 学习内容:
- 安装开发环境(如Visual Studio, Code::Blocks, CLion等)。
- 理解C++的基本语法:变量、数据类型、输入输出。
- 基本操作符和表达式。
- 控制结构:条件语句(if, switch)和循环(for, while, do-while)。
第2周
- 学习内容:
- 函数的定义和调用,参数传递。
- 作用域与生存期,变量的生命周期。
- 数组与字符串的基本操作。
- 使用指针和引用,理解其区别与用途。
第3周
- 学习内容:
- 结构体与联合体。
- 枚举类型的使用。
- 动态内存分配(new/delete)。
- 简单的文件操作(读取和写入文件)。
第4周
- 项目实践:
- 编写一个小型项目,例如学生成绩管理系统,包含添加、删除、查询和排序功能。
- 复习前几周的内容,巩固基础知识。
第二个月:面向对象编程与标准库
第5周
- 学习内容:
- 理解类与对象的概念。
- 构造函数与析构函数。
- 成员函数与静态成员。
- this指针的使用。
第6周
- 学习内容:
- 继承与多态。
- 虚函数与纯虚函数。
- 抽象类与接口。
- 运算符重载。
第7周
- 学习内容:
- 标准模板库(STL)简介。
- 容器(vector, list, map, set)的使用。
- 迭代器与算法(sort, find, for_each)。
- 字符串处理(std::string)。
第8周
- 项目实践:
- 编写一个中型项目,例如图书馆管理系统,包含书籍的增删改查、借阅记录管理等。
- 复习面向对象编程的概念和STL的使用。
第三个月:高级特性与实践
第9周
- 学习内容:
- 异常处理(try, catch, throw)。
- 智能指针(unique_ptr, shared_ptr)。
- 多线程编程(std::thread, std::mutex)。
- 函数对象与Lambda表达式。
第10周
- 学习内容:
- 模板编程与元编程基础。
- 类型转换(static_cast, dynamic_cast, const_cast, reinterpret_cast)。
- 文件流与序列化。
- 网络编程基础(使用Boost.Asio库)。
第11周
- 学习内容:
- 设计模式基础(单例模式、工厂模式、观察者模式等)。
- 学习C++11/14/17的新特性。
- 代码优化与调试技巧。
- 项目构建工具(CMake)的使用。
第12周
- 项目实践:
- 编写一个综合性项目,例如在线聊天室,包含用户注册、消息发送与接收、多线程处理等功能。
- 复习整个学习过程中的重点内容,查漏补缺。
补充建议
- 资源:利用在线资源如Coursera、Udemy、LeetCode、HackerRank等平台,进行在线课程和编程练习。
- 社区:加入C++相关的技术社区,如Stack Overflow、Reddit、C++ Slack等,参与讨论和提问。
- 阅读代码:阅读开源项目的代码(如GitHub上的C++项目),理解和学习他人的编码风格和技巧。
希望这个学习计划能帮助你系统地学习C++,祝你学有所成!
第一周的学习计划将重点放在C++的基础语法与概念上。这些内容是理解和掌握C++编程语言的基础,通过这一周的学习,你将能够编写简单的C++程序并理解其基本结构。
第一周学习计划
第1天:C++简介与开发环境设置
-
学习内容:
- 理解C++的基本概念和历史。
- 安装和配置C++开发环境(如Visual Studio, Code::Blocks, CLion等)。
- 熟悉集成开发环境(IDE)的基本使用方法。
-
实践:
- 安装IDE,并编写一个简单的“Hello, World!”程序。
- 运行和调试“Hello, World!”程序,了解程序的编译和执行过程。
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
第2天:基本语法和数据类型
-
学习内容:
- 理解基本数据类型:整型(int)、浮点型(float, double)、字符型(char)、布尔型(bool)。
- 理解变量的声明和初始化。
- 理解常量(const)的使用。
-
实践:
- 编写代码,声明和初始化不同类型的变量,进行基本的输入和输出操作。
#include <iostream>
int main() {
int age = 25;
double salary = 50000.50;
char grade = 'A';
bool isEmployed = true;
std::cout << "Age: " << age << std::endl;
std::cout << "Salary: " << salary << std::endl;
std::cout << "Grade: " << grade << std::endl;
std::cout << "Employed: " << std::boolalpha << isEmployed << std::endl;
return 0;
}
第3天:基本操作符和表达式
-
学习内容:
- 理解基本操作符:算术操作符(+、-、*、/、%)、关系操作符(==、!=、>、<、>=、<=)、逻辑操作符(&&、||、!)。
- 理解赋值操作符和复合赋值操作符(+=、-=、*=、/=、%=)。
-
实践:
- 编写代码,使用各种操作符进行计算,并输出结果。
#include <iostream>
int main() {
int a = 10;
int b = 3;
std::cout << "a + b = " << (a + b) << std::endl;
std::cout << "a - b = " << (a - b) << std::endl;
std::cout << "a * b = " << (a * b) << std::endl;
std::cout << "a / b = " << (a / b) << std::endl;
std::cout << "a % b = " << (a % b) << std::endl;
std::cout << "a == b: " << (a == b) << std::endl;
std::cout << "a != b: " << (a != b) << std::endl;
std::cout << "a > b: " << (a > b) << std::endl;
std::cout << "a < b: " << (a < b) << std::endl;
std::cout << "a >= b: " << (a >= b) << std::endl;
std::cout << "a <= b: " << (a <= b) << std::endl;
std::cout << "!(a == b): " << !(a == b) << std::endl;
std::cout << "(a > b) && (b > 0): " << ((a > b) && (b > 0)) << std::endl;
std::cout << "(a > b) || (b < 0): " << ((a > b) || (b < 0)) << std::endl;
return 0;
}
第4天:控制结构:条件语句
-
学习内容:
- 理解条件语句:if、if-else、if-else if-else、switch。
- 理解条件运算符(三目运算符)。
-
实践:
- 编写代码,使用条件语句进行基本的逻辑判断。
#include <iostream>
int main() {
int number = 10;
if (number > 0) {
std::cout << "Number is positive." << std::endl;
} else if (number < 0) {
std::cout << "Number is negative." << std::endl;
} else {
std::cout << "Number is zero." << std::endl;
}
char grade = 'B';
switch (grade) {
case 'A':
std::cout << "Excellent!" << std::endl;
break;
case 'B':
case 'C':
std::cout << "Well done!" << std::endl;
break;
case 'D':
std::cout << "You passed" << std::endl;
break;
case 'F':
std::cout << "Better try again" << std::endl;
break;
default:
std::cout << "Invalid grade" << std::endl;
}
int age = 20;
std::string result = (age >= 18) ? "Adult" : "Minor";
std::cout << "You are an " << result << "." << std::endl;
return 0;
}
第5天:控制结构:循环语句
-
学习内容:
- 理解循环语句:for、while、do-while。
- 理解循环控制语句:break、continue。
-
实践:
- 编写代码,使用各种循环语句进行循环操作。
#include <iostream>
int main() {
// for 循环
for (int i = 1; i <= 5; ++i) {
std::cout << "for loop iteration: " << i << std::endl;
}
// while 循环
int j = 1;
while (j <= 5) {
std::cout << "while loop iteration: " << j << std::endl;
++j;
}
// do-while 循环
int k = 1;
do {
std::cout << "do-while loop iteration: " << k << std::endl;
++k;
} while (k <= 5);
// break 和 continue
for (int l = 1; l <= 10; ++l) {
if (l == 5) {
continue;
}
if (l == 8) {
break;
}
std::cout << "loop with break/continue: " << l << std::endl;
}
return 0;
}
第6天:综合练习
- 综合练习:
- 编写一个简单的计算器程序,支持加、减、乘、除运算,使用前几天学习的内容进行实现。
#include <iostream>
int main() {
double num1, num2;
char operation;
std::cout << "Enter first number: ";
std::cin >> num1;
std::cout << "Enter an operator (+, -, *, /): ";
std::cin >> operation;
std::cout << "Enter second number: ";
std::cin >> num2;
double result;
bool validOperation = true;
switch (operation) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 != 0) {
result = num1 / num2;
} else {
std::cout << "Error: Division by zero!" << std::endl;
validOperation = false;
}
break;
default:
std::cout << "Error: Invalid operator!" << std::endl;
validOperation = false;
break;
}
if (validOperation) {
std::cout << "Result: " << result << std::endl;
}
return 0;
}
第7天:复习与巩固
- 复习内容:
- 回顾本周学习的所有概念和代码。
- 做一些额外的练习题,例如在不同场景下使用条件语句和循环语句。
学习建议
- 多实践:编程语言的学习需要大量的代码实践,建议每学习一个新概念都进行相应的代码练习。
- 多交流:与同学或社区中的开发者交流,获取更多的反馈和建议。
- 持续学习:编程语言的学习是一个不断积累和进步的过程,保持学习的热情,不断挑战自己。
通过这一周的学习和练习,你将能够熟
练掌握C++的基础语法和概念,为后续更深入的学习打下坚实的基础。
好的,第二周的学习计划将重点放在以下几个关键领域:函数的定义和调用、作用域与生存期、数组与字符串的基本操作以及指针和引用的使用。以下是详细的学习内容和建议:
第二周学习计划
第1天:函数的定义和调用
-
学习内容:
- 函数的声明与定义:理解函数的基本结构,包括返回类型、函数名、参数列表和函数体。
- 函数的调用:如何在程序中调用函数,并传递参数。
- 参数传递:按值传递和按引用传递的区别和使用场景。
-
实践:
- 编写简单的函数,练习计算两个数的和、最大值、最小值等。
- 编写递归函数,例如计算阶乘和斐波那契数列。
第2天:作用域与生存期
-
学习内容:
- 变量的作用域:局部变量和全局变量的定义和使用。
- 变量的生存期:自动变量和静态变量的生命周期。
- 名字空间(namespace):避免命名冲突的机制,如何定义和使用名字空间。
-
实践:
- 编写示例代码,演示局部变量和全局变量的作用域。
- 使用静态变量跟踪函数调用次数。
第3天:数组与字符串的基本操作
-
学习内容:
- 数组的定义和初始化:一维数组和多维数组的声明与使用。
- 字符串的处理:C风格字符串(char数组)和C++字符串(std::string)的基本操作。
- 常用的字符串函数:strlen, strcpy, strcat, strcmp等。
-
实践:
- 编写程序,操作数组元素,计算数组元素的和、平均值等。
- 使用字符串函数处理字符串,编写字符串连接、复制、比较等操作的示例程序。
第4天:指针和引用
-
学习内容:
- 指针的基本概念:指针的定义、初始化和基本操作。
- 指针运算:指针的算术运算和指针比较。
- 引用的使用:引用的定义、初始化和用途,引用与指针的区别。
-
实践:
- 编写程序,使用指针访问和修改数组元素。
- 编写函数,通过引用传递参数,演示修改实参值。
第5天:综合练习
- 综合练习:
- 编写一个简单的程序,综合运用函数、数组、指针和引用。例如,编写一个程序,输入学生的成绩,通过指针和引用返回最高成绩、最低成绩和平均成绩。
第6天:复习与巩固
- 复习内容:
- 回顾本周学习的所有概念和代码。
- 做一些额外的练习题,例如LeetCode上的简单题目,巩固所学知识。
第7天:项目实践
- 项目:
- 编写一个小型项目,例如简单的学生成绩管理系统,包含以下功能:
- 输入学生成绩。
- 计算并输出最高成绩、最低成绩和平均成绩。
- 按照成绩排序输出。
- 在项目中,综合使用函数、数组、指针和引用,强化对这些概念的理解和应用。
- 编写一个小型项目,例如简单的学生成绩管理系统,包含以下功能:
学习建议
- 阅读文档:建议阅读C++标准库文档,特别是涉及到的函数和库的详细说明。
- 多动手:编程语言的学习需要大量的代码实践,建议每学习一个新概念都进行相应的代码练习。
- 理解错误:编程过程中出现的错误和调试是学习的重要部分,仔细阅读和理解错误信息,学习如何调试代码。
通过这一周的学习和练习,你将能够熟练掌握函数、作用域、数组和指针的基本操作,为后续更复杂的C++编程打下坚实的基础。
第三周的学习计划将重点放在以下几个关键领域:结构体与联合体、枚举类型的使用、动态内存分配以及文件操作。以下是详细的学习内容和建议:
第三周学习计划
第1天:结构体与联合体
-
学习内容:
- 结构体的定义和使用:理解结构体的基本概念和定义方法。
- 结构体的初始化和访问成员变量。
- 嵌套结构体和数组结构体。
- 联合体的定义和使用:理解联合体的存储机制和应用场景。
-
实践:
- 编写结构体,存储学生信息(姓名、年龄、成绩),并编写函数处理这些信息。
- 编写联合体,存储不同类型的数据,理解其内存共用特性。
第2天:枚举类型的使用
-
学习内容:
- 枚举类型的定义和基本用法:理解枚举类型的定义方式和使用场景。
- 枚举类型的作用域和类型安全性。
- 使用枚举类型进行条件判断和循环控制。
-
实践:
- 定义一个枚举类型表示星期,编写程序根据输入的数字输出对应的星期名称。
- 使用枚举类型表示状态机的不同状态,编写简单的状态机程序。
第3天:动态内存分配
-
学习内容:
- 动态内存分配的基本概念:了解动态内存分配的必要性和基本操作(new/delete)。
- 动态数组的创建和释放。
- 动态内存管理的注意事项,避免内存泄漏。
-
实践:
- 编写程序,动态分配一个数组,输入并输出数组元素。
- 编写链表结构,动态添加和删除节点。
第4天:文件操作基础
-
学习内容:
- 文件的基本操作:打开文件、读写文件、关闭文件。
- 文本文件和二进制文件的区别和操作方法。
- 文件操作的常用函数:ifstream, ofstream, fstream。
-
实践:
- 编写程序,从文件中读取数据并输出到控制台。
- 编写程序,将用户输入的数据保存到文件中。
第5天:综合练习
- 综合练习:
- 编写一个简单的项目,综合运用结构体、枚举、动态内存和文件操作。例如,编写一个通讯录管理系统,包含添加联系人、删除联系人、显示联系人列表、保存和读取通讯录等功能。
第6天:复习与巩固
- 复习内容:
- 回顾本周学习的所有概念和代码。
- 做一些额外的练习题,例如在不同场景下使用结构体、枚举和动态内存。
第7天:项目实践
- 项目:
- 编写一个小型项目,例如简单的学生成绩管理系统,包含以下功能:
- 定义学生信息的结构体,包含姓名、年龄、成绩。
- 使用动态内存分配创建学生数组。
- 定义枚举类型表示不同的操作(添加、删除、查询、保存、读取)。
- 实现文件操作,将学生信息保存到文件并从文件读取。
- 在项目中,综合使用结构体、枚举、动态内存和文件操作,强化对这些概念的理解和应用。
- 编写一个小型项目,例如简单的学生成绩管理系统,包含以下功能:
学习建议
- 阅读文档:建议阅读C++标准库文档,特别是涉及到的文件操作和动态内存管理的详细说明。
- 多动手:编程语言的学习需要大量的代码实践,建议每学习一个新概念都进行相应的代码练习。
- 理解错误:编程过程中出现的错误和调试是学习的重要部分,仔细阅读和理解错误信息,学习如何调试代码。
通过这一周的学习和练习,你将能够熟练掌握结构体、枚举类型、动态内存分配和基本的文件操作,为后续更复杂的C++编程打下坚实的基础。
第四周的学习计划将重点放在一个小型项目的实现上,通过综合应用前几周学习的内容,进一步巩固和强化所学的知识。这一周将以项目实践为主,以下是详细的学习内容和步骤。
第四周学习计划
第1-2天:项目需求分析与设计
-
项目选择:
- 选择一个合适的小型项目,例如学生成绩管理系统、通讯录管理系统或图书管理系统。我们以学生成绩管理系统为例。
-
需求分析:
- 确定项目的基本功能:
- 添加学生信息(姓名、年龄、成绩等)。
- 删除学生信息。
- 查询学生信息。
- 显示所有学生信息。
- 按照成绩排序。
- 将学生信息保存到文件。
- 从文件读取学生信息。
- 确定项目的基本功能:
-
设计文档:
- 确定项目的结构和模块。
- 设计数据结构:
- 使用结构体定义学生信息。
- 使用动态数组存储学生信息。
- 设计功能模块:
- 添加、删除、查询、显示、排序功能的实现。
- 文件读写功能的实现。
第3-4天:代码实现
- 模块实现:
-
添加学生信息:
struct Student { std::string name; int age; float grade; }; void addStudent(std::vector<Student>& students) { Student newStudent; std::cout << "Enter name: "; std::cin >> newStudent.name; std::cout << "Enter age: "; std::cin >> newStudent.age; std::cout << "Enter grade: "; std::cin >> newStudent.grade; students.push_back(newStudent); }
-
删除学生信息:
void deleteStudent(std::vector<Student>& students, const std::string& name) { auto it = std::remove_if(students.begin(), students.end(), [&](Student& s) { return s.name == name; }); students.erase(it, students.end()); }
-
查询学生信息:
void searchStudent(const std::vector<Student>& students, const std::string& name) { auto it = std::find_if(students.begin(), students.end(), [&](const Student& s) { return s.name == name; }); if (it != students.end()) { std::cout << "Found: " << it->name << ", Age: " << it->age << ", Grade: " << it->grade << std::endl; } else { std::cout << "Student not found." << std::endl; } }
-
显示所有学生信息:
void displayAllStudents(const std::vector<Student>& students) { for (const auto& student : students) { std::cout << "Name: " << student.name << ", Age: " << student.age << ", Grade: " << student.grade << std::endl; } }
-
按成绩排序:
void sortStudentsByGrade(std::vector<Student>& students) { std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) { return a.grade > b.grade; }); }
-
文件操作:
void saveToFile(const std::vector<Student>& students, const std::string& filename) { std::ofstream outFile(filename); for (const auto& student : students) { outFile << student.name << " " << student.age << " " << student.grade << std::endl; } } void loadFromFile(std::vector<Student>& students, const std::string& filename) { std::ifstream inFile(filename); Student student; while (inFile >> student.name >> student.age >> student.grade) { students.push_back(student); } }
-
第5天:项目整合与测试
-
整合模块:
- 将各个功能模块整合到主程序中,编写主菜单,用户可以选择执行不同的操作。
- 示例代码:
int main() { std::vector<Student> students; int choice; std::string filename = "students.txt"; do { std::cout << "1. Add Student\n2. Delete Student\n3. Search Student\n4. Display All Students\n5. Sort Students by Grade\n6. Save to File\n7. Load from File\n8. Exit\n"; std::cout << "Enter your choice: "; std::cin >> choice; switch (choice) { case 1: addStudent(students); break; case 2: std::string name; std::cout << "Enter name to delete: "; std::cin >> name; deleteStudent(students, name); break; case 3: std::cout << "Enter name to search: "; std::cin >> name; searchStudent(students, name); break; case 4: displayAllStudents(students); break; case 5: sortStudentsByGrade(students); break; case 6: saveToFile(students, filename); break; case 7: loadFromFile(students, filename); break; case 8: std::cout << "Exiting..." << std::endl; break; default: std::cout << "Invalid choice." << std::endl; break; } } while (choice != 8); return 0; }
-
测试与调试:
- 测试每个功能模块,确保其正确性。
- 调试程序中的错误,确保程序运行稳定。
第6天:项目优化与文档编写
-
代码优化:
- 检查并优化代码,提升性能和可读性。
- 确保动态内存分配和释放正确,避免内存泄漏。
-
文档编写:
- 编写项目文档,描述项目的功能、设计思路和使用方法。
- 包括用户手册,指导用户如何操作该系统。
第7天:项目展示与总结
-
项目展示:
- 演示项目的功能,展示项目的实际效果。
- 向同学或导师展示项目,获取反馈和建议。
-
总结:
- 总结项目开发过程中的收获和经验。
- 回顾整个四周的学习过程,梳理知识点,查漏补缺。
学习建议
- 多实践:项目的实践是巩固知识的最好方式,通过实际编程,你将更深入理解C++的概念和应用。
- 多交流:与同学或社区中的开发者交流,获取更多的反馈和建议。
- 持续学习:编程语言的学习是一个不断积累和进步的过程,保持学习的热情,不断挑战自己。
通过这一周的项目实践,你将能够更好地掌握C++的基础知识,并具备一定的项目开发能力,为后续更高级的学习和实际应用打下坚实的基础。
第五周的学习计划将重点放在面向对象编程(OOP)的基本概念和应用上,这是C++编程的重要部分。以下是详细的学习内容和建议。
第五周学习计划
第1天:类与对象的基本概念
-
学习内容:
- 理解类和对象的基本概念。
- 类的定义和对象的创建。
- 类的成员变量和成员函数。
-
实践:
- 编写简单的类,例如一个表示学生的类,包含学生的姓名、年龄和成绩等属性,以及显示学生信息的成员函数。
- 创建对象,调用成员函数,测试类的基本功能。
class Student {
public:
std::string name;
int age;
float grade;
void displayInfo() {
std::cout << "Name: " << name << ", Age: " << age << ", Grade: " << grade << std::endl;
}
};
int main() {
Student student1;
student1.name = "Alice";
student1.age = 20;
student1.grade = 85.5;
student1.displayInfo();
return 0;
}
第2天:构造函数与析构函数
-
学习内容:
- 构造函数的定义和使用,理解构造函数的重载。
- 析构函数的定义和使用,理解析构函数的用途。
-
实践:
- 为Student类添加构造函数,包括默认构造函数和带参数的构造函数。
- 添加析构函数,输出对象销毁的提示信息。
class Student {
public:
std::string name;
int age;
float grade;
// 默认构造函数
Student() : name("Unknown"), age(0), grade(0.0) {
std::cout << "Default constructor called" << std::endl;
}
// 带参数的构造函数
Student(std::string n, int a, float g) : name(n), age(a), grade(g) {
std::cout << "Parameterized constructor called" << std::endl;
}
// 析构函数
~Student() {
std::cout << "Destructor called for " << name << std::endl;
}
void displayInfo() {
std::cout << "Name: " << name << ", Age: " << age << ", Grade: " << grade << std::endl;
}
};
int main() {
Student student1;
Student student2("Bob", 21, 90.0);
student1.displayInfo();
student2.displayInfo();
return 0;
}
第3天:成员函数与静态成员
-
学习内容:
- 成员函数的定义和使用。
- 静态成员变量和静态成员函数的定义和使用。
- 理解静态成员的作用域和生命周期。
-
实践:
- 为Student类添加静态成员变量,统计学生对象的数量。
- 添加静态成员函数,返回学生对象的数量。
class Student {
public:
std::string name;
int age;
float grade;
static int studentCount;
// 构造函数
Student(std::string n, int a, float g) : name(n), age(a), grade(g) {
studentCount++;
}
// 析构函数
~Student() {
studentCount--;
}
void displayInfo() {
std::cout << "Name: " << name << ", Age: " << age << ", Grade: " << grade << std::endl;
}
static int getStudentCount() {
return studentCount;
}
};
// 初始化静态成员变量
int Student::studentCount = 0;
int main() {
Student student1("Alice", 20, 85.5);
Student student2("Bob", 21, 90.0);
student1.displayInfo();
student2.displayInfo();
std::cout << "Total students: " << Student::getStudentCount() << std::endl;
return 0;
}
第4天:this指针的使用
-
学习内容:
- 理解this指针的概念和用途。
- 在类的成员函数中使用this指针,避免成员变量名和参数名冲突。
-
实践:
- 修改Student类的成员函数,使用this指针访问成员变量。
class Student {
public:
std::string name;
int age;
float grade;
static int studentCount;
// 构造函数
Student(std::string name, int age, float grade) {
this->name = name;
this->age = age;
this->grade = grade;
studentCount++;
}
// 析构函数
~Student() {
studentCount--;
}
void displayInfo() {
std::cout << "Name: " << this->name << ", Age: " << this->age << ", Grade: " << this->grade << std::endl;
}
static int getStudentCount() {
return studentCount;
}
};
// 初始化静态成员变量
int Student::studentCount = 0;
int main() {
Student student1("Alice", 20, 85.5);
Student student2("Bob", 21, 90.0);
student1.displayInfo();
student2.displayInfo();
std::cout << "Total students: " << Student::getStudentCount() << std::endl;
return 0;
}
第5天:综合练习
- 综合练习:
- 编写一个包含多个类的程序,例如图书管理系统,包含图书类、作者类和借阅记录类,练习类的定义、构造函数和成员函数的使用。
class Book {
public:
std::string title;
std::string author;
int year;
Book(std::string t, std::string a, int y) : title(t), author(a), year(y) {
}
void displayInfo() {
std::cout << "Title: " << title << ", Author: " << author << ", Year: " << year << std::endl;
}
};
class Library {
private:
std::vector<Book> books;
public:
void addBook(const Book& book) {
books.push_back(book);
}
void displayBooks() {
for (const auto& book : books) {
book.displayInfo();
}
}
};
int main() {
Library library;
library.addBook(Book("1984", "George Orwell", 1949));
library.addBook(Book("To Kill a Mockingbird", "Harper Lee", 1960));
library.displayBooks();
return 0;
}
第6天:复习与巩固
- 复习内容:
- 回顾本周学习的所有概念和代码。
- 做一些额外的练习题,例如在不同场景下定义和使用类、对象、构造函数和静态成员。
第7天:项目实践
- 项目:
- 编写一个小型项目,例如银行账户管理系统,包含以下功能:
- 定义账户类,包含账户号码、账户持有人姓名、账户余额等属性。
- 实现存款、取款和显示账户信息的成员函数。
- 统计所有账户的总数和总余额。
- 在项目中,综合使用类、构造函数、析构函数、成员函数、静态成员和this指针,强化对这些概念的理解和应用。
- 编写一个小型项目,例如银行账户管理系统,包含以下功能:
class BankAccount {
public:
std::string accountNumber;
std::string accountHolder;
double balance;
static int accountCount;
static double totalBalance;
BankAccount(std::string accNum, std::string accHolder, double bal) : accountNumber(accNum), accountHolder(accHolder), balance(bal) {
accountCount++;
totalBalance += bal;
}
~BankAccount() {
accountCount--;
totalBalance -= balance;
}
void deposit(double amount) {
balance += amount;
totalBalance += amount;
}
void withdraw(double amount) {
if (amount <= balance) {
balance -= amount;
totalBalance -= amount;
} else {
std::cout << "Insufficient balance." << std::endl;
}
}
void displayInfo() {
std::cout << "Account Number: " << accountNumber << ", Account Holder: " << accountHolder << ", Balance: " << balance << std::endl;
}
static int getAccountCount() {
return accountCount;
}
static double getTotalBalance() {
return totalBalance;
}
};
int BankAccount::accountCount = 0;
double BankAccount::totalBalance = 0.0;
int main()