12周快速入门C++

学习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天:复习与巩固
  • 复习内容
    • 回顾本周学习的所有概念和代码。
    • 做一些额外的练习题,例如在不同场景下使用条件语句和循环语句。

学习建议

  1. 多实践:编程语言的学习需要大量的代码实践,建议每学习一个新概念都进行相应的代码练习。
  2. 多交流:与同学或社区中的开发者交流,获取更多的反馈和建议。
  3. 持续学习:编程语言的学习是一个不断积累和进步的过程,保持学习的热情,不断挑战自己。

通过这一周的学习和练习,你将能够熟

练掌握C++的基础语法和概念,为后续更深入的学习打下坚实的基础。

好的,第二周的学习计划将重点放在以下几个关键领域:函数的定义和调用、作用域与生存期、数组与字符串的基本操作以及指针和引用的使用。以下是详细的学习内容和建议:

第二周学习计划

第1天:函数的定义和调用
  • 学习内容

    • 函数的声明与定义:理解函数的基本结构,包括返回类型、函数名、参数列表和函数体。
    • 函数的调用:如何在程序中调用函数,并传递参数。
    • 参数传递:按值传递和按引用传递的区别和使用场景。
  • 实践

    • 编写简单的函数,练习计算两个数的和、最大值、最小值等。
    • 编写递归函数,例如计算阶乘和斐波那契数列。
第2天:作用域与生存期
  • 学习内容

    • 变量的作用域:局部变量和全局变量的定义和使用。
    • 变量的生存期:自动变量和静态变量的生命周期。
    • 名字空间(namespace):避免命名冲突的机制,如何定义和使用名字空间。
  • 实践

    • 编写示例代码,演示局部变量和全局变量的作用域。
    • 使用静态变量跟踪函数调用次数。
第3天:数组与字符串的基本操作
  • 学习内容

    • 数组的定义和初始化:一维数组和多维数组的声明与使用。
    • 字符串的处理:C风格字符串(char数组)和C++字符串(std::string)的基本操作。
    • 常用的字符串函数:strlen, strcpy, strcat, strcmp等。
  • 实践

    • 编写程序,操作数组元素,计算数组元素的和、平均值等。
    • 使用字符串函数处理字符串,编写字符串连接、复制、比较等操作的示例程序。
第4天:指针和引用
  • 学习内容

    • 指针的基本概念:指针的定义、初始化和基本操作。
    • 指针运算:指针的算术运算和指针比较。
    • 引用的使用:引用的定义、初始化和用途,引用与指针的区别。
  • 实践

    • 编写程序,使用指针访问和修改数组元素。
    • 编写函数,通过引用传递参数,演示修改实参值。
第5天:综合练习
  • 综合练习
    • 编写一个简单的程序,综合运用函数、数组、指针和引用。例如,编写一个程序,输入学生的成绩,通过指针和引用返回最高成绩、最低成绩和平均成绩。
第6天:复习与巩固
  • 复习内容
    • 回顾本周学习的所有概念和代码。
    • 做一些额外的练习题,例如LeetCode上的简单题目,巩固所学知识。
第7天:项目实践
  • 项目
    • 编写一个小型项目,例如简单的学生成绩管理系统,包含以下功能:
      • 输入学生成绩。
      • 计算并输出最高成绩、最低成绩和平均成绩。
      • 按照成绩排序输出。
    • 在项目中,综合使用函数、数组、指针和引用,强化对这些概念的理解和应用。

学习建议

  1. 阅读文档:建议阅读C++标准库文档,特别是涉及到的函数和库的详细说明。
  2. 多动手:编程语言的学习需要大量的代码实践,建议每学习一个新概念都进行相应的代码练习。
  3. 理解错误:编程过程中出现的错误和调试是学习的重要部分,仔细阅读和理解错误信息,学习如何调试代码。

通过这一周的学习和练习,你将能够熟练掌握函数、作用域、数组和指针的基本操作,为后续更复杂的C++编程打下坚实的基础。

第三周的学习计划将重点放在以下几个关键领域:结构体与联合体、枚举类型的使用、动态内存分配以及文件操作。以下是详细的学习内容和建议:

第三周学习计划

第1天:结构体与联合体
  • 学习内容

    • 结构体的定义和使用:理解结构体的基本概念和定义方法。
    • 结构体的初始化和访问成员变量。
    • 嵌套结构体和数组结构体。
    • 联合体的定义和使用:理解联合体的存储机制和应用场景。
  • 实践

    • 编写结构体,存储学生信息(姓名、年龄、成绩),并编写函数处理这些信息。
    • 编写联合体,存储不同类型的数据,理解其内存共用特性。
第2天:枚举类型的使用
  • 学习内容

    • 枚举类型的定义和基本用法:理解枚举类型的定义方式和使用场景。
    • 枚举类型的作用域和类型安全性。
    • 使用枚举类型进行条件判断和循环控制。
  • 实践

    • 定义一个枚举类型表示星期,编写程序根据输入的数字输出对应的星期名称。
    • 使用枚举类型表示状态机的不同状态,编写简单的状态机程序。
第3天:动态内存分配
  • 学习内容

    • 动态内存分配的基本概念:了解动态内存分配的必要性和基本操作(new/delete)。
    • 动态数组的创建和释放。
    • 动态内存管理的注意事项,避免内存泄漏。
  • 实践

    • 编写程序,动态分配一个数组,输入并输出数组元素。
    • 编写链表结构,动态添加和删除节点。
第4天:文件操作基础
  • 学习内容

    • 文件的基本操作:打开文件、读写文件、关闭文件。
    • 文本文件和二进制文件的区别和操作方法。
    • 文件操作的常用函数:ifstream, ofstream, fstream。
  • 实践

    • 编写程序,从文件中读取数据并输出到控制台。
    • 编写程序,将用户输入的数据保存到文件中。
第5天:综合练习
  • 综合练习
    • 编写一个简单的项目,综合运用结构体、枚举、动态内存和文件操作。例如,编写一个通讯录管理系统,包含添加联系人、删除联系人、显示联系人列表、保存和读取通讯录等功能。
第6天:复习与巩固
  • 复习内容
    • 回顾本周学习的所有概念和代码。
    • 做一些额外的练习题,例如在不同场景下使用结构体、枚举和动态内存。
第7天:项目实践
  • 项目
    • 编写一个小型项目,例如简单的学生成绩管理系统,包含以下功能:
      • 定义学生信息的结构体,包含姓名、年龄、成绩。
      • 使用动态内存分配创建学生数组。
      • 定义枚举类型表示不同的操作(添加、删除、查询、保存、读取)。
      • 实现文件操作,将学生信息保存到文件并从文件读取。
    • 在项目中,综合使用结构体、枚举、动态内存和文件操作,强化对这些概念的理解和应用。

学习建议

  1. 阅读文档:建议阅读C++标准库文档,特别是涉及到的文件操作和动态内存管理的详细说明。
  2. 多动手:编程语言的学习需要大量的代码实践,建议每学习一个新概念都进行相应的代码练习。
  3. 理解错误:编程过程中出现的错误和调试是学习的重要部分,仔细阅读和理解错误信息,学习如何调试代码。

通过这一周的学习和练习,你将能够熟练掌握结构体、枚举类型、动态内存分配和基本的文件操作,为后续更复杂的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天:项目展示与总结
  • 项目展示

    • 演示项目的功能,展示项目的实际效果。
    • 向同学或导师展示项目,获取反馈和建议。
  • 总结

    • 总结项目开发过程中的收获和经验。
    • 回顾整个四周的学习过程,梳理知识点,查漏补缺。

学习建议

  1. 多实践:项目的实践是巩固知识的最好方式,通过实际编程,你将更深入理解C++的概念和应用。
  2. 多交流:与同学或社区中的开发者交流,获取更多的反馈和建议。
  3. 持续学习:编程语言的学习是一个不断积累和进步的过程,保持学习的热情,不断挑战自己。

通过这一周的项目实践,你将能够更好地掌握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() 
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值