C++ 入门,小练习
2026/6/25 18:23:48 网站建设 项目流程


构造函数
初始化列表
继承
纯虚函数
多态
override
vector
shared_ptr
string
文件流
虚函数设计

#include <iostream> #include <string> #include <vector> #include <fstream> #include <sstream> #include <memory> #include <cstring> #include <cstddef> class Person { protected: int m_Id; std::string m_Name; public: Person(int id, const std::string& name) : m_Id(id) , m_Name(name) { } const std::string& GetName() const { return m_Name; } int GetId() const { return m_Id; } // = 0 的意思是:这个函数没有实现,Person 成了一个抽象类(也叫接口类), Person p 错误 virtual void Print() const = 0; virtual std::string GetType() const = 0; virtual std::string Serialize() const = 0; virtual ~Person() = default; }; class Student : public Person { private: int m_Age; public: Student(int id, const std::string& name, int age) : Person(id,name), m_Age(age) { } std::string GetType() const override { return "Student"; } std::string Serialize() const override { return "Student," + std::to_string(m_Id) + "," + m_Name + "," + std::to_string(m_Age); } void Print() const override { std::cout<< m_Id << ",Name: " << m_Name << ",Age: " << m_Age << std::endl; } }; class Teacher : public Person { private: std::string m_Subject; public: Teacher(int id, const std::string& name, const std::string& subject) : Person(id,name), m_Subject(subject) { } std::string GetType() const override { return "Teacher"; } std::string Serialize() const override { return "Teacher," + std::to_string(m_Id) + "," + m_Name + "," + m_Subject; } void Print() const override { std::cout<< m_Id << ",Name: " << m_Name << ",Subject: " << m_Subject << std::endl; } }; class Manager { private: std::vector<std::shared_ptr<Person>> m_Persons; public: bool IsIdExist(int id) { for(const auto& p : m_Persons) { if(p->GetId() == id) return true; } return false; } void AddStudent(int id, const std::string& name, int age) { if (IsIdExist(id)){ std::cout << id << " ID alreay exists" << std::endl; return ; } m_Persons.push_back(std::make_shared<Student>(id,name,age)); } void AddTeacher(int id, const std::string& name, const std::string& subject) { if (IsIdExist(id)){ std::cout << id << " ID alreay exists" << std::endl; return ; } m_Persons.push_back(std::make_shared<Teacher>(id,name,subject)); } int Delete(int id) { for(auto it = m_Persons.begin(); it != m_Persons.end(); ++it) { if ((*it)->GetId() == id ){ m_Persons.erase(it); return 0; } } return -1; } std::shared_ptr<Person> Search(const std::string& name) { for(auto it = m_Persons.begin(); it != m_Persons.end() ; ++it) { if((*it)->GetName() == name){ return *it; } } return nullptr; } void ShowAll() const { for(const auto& p : m_Persons) { p->Print(); } } void Save() { std::ofstream file("person.txt"); if(!file){ std::cerr << "can't open file" << std::endl; return ; } for(const auto& p : m_Persons) { file << p->Serialize() << '\n'; } } void Load() { std::ifstream file("person.txt"); if(!file){ std::cerr << "can't open file" << std::endl; return ; } m_Persons.clear(); std::string line; while(std::getline(file,line)) { std::stringstream ss(line); std::string type, token, name, extra; int id; std::getline(ss, type, ','); std::getline(ss, token, ','); id = std::stoi(token); std::getline(ss, name, ','); std::getline(ss, extra, ','); if (type == "Student") { int age = std::stoi(extra); m_Persons.push_back(std::make_shared<Student>(id, name, age)); } else if (type == "Teacher") { m_Persons.push_back(std::make_shared<Teacher>(id, name, extra)); } } std::cout << "数据已从文件加载。" << std::endl; } }; int main() { Manager manager; manager.AddStudent(1,"sir",30); manager.AddStudent(2,"gir",27); manager.AddStudent(3,"kil",25); manager.AddTeacher(3,"kk","match"); manager.AddTeacher(5,"jjl","chinese"); manager.AddTeacher(6,"ww","program"); manager.ShowAll(); std::cout << "test 1" << std::endl; if(manager.Delete(1) < 0) std::cout << "Delete not found" << std::endl; if(manager.Delete(3) < 0) std::cout << "Delete not found" << std::endl; if(manager.Delete(6) < 0) std::cout << "Delete not found" << std::endl; manager.ShowAll(); std::cout << "test 2" << std::endl; auto p = manager.Search("gir"); if (p){ std::cout << p->GetType() << std::endl; p->Print(); }else{ std::cout << "Search not found" << std::endl; } p = manager.Search("kk"); if (p){ std::cout << p->GetType() << std::endl; p->Print(); }else{ std::cout << "Search not found" << std::endl; } std::cout << "test 3" << std::endl; manager.AddStudent(7,"qq",26); manager.AddTeacher(8,"yy","program"); manager.ShowAll(); std::cout << "test 4" << std::endl; manager.Save(); manager.Load(); manager.ShowAll(); return 0; }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询