3.11 封装集合
【1】封装集合
范例:
1 #include <QString> 2 #define MAX_STUDENT_COUNT 20 3 4 class Student 5 { 6 public: 7 Student(int nId, QString name = QString(), QString department = QString("jisuanji")) 8 : m_nID(nId) 9 , m_name(name) 10 , m_department(department) 11 {} 12 13 int getId() const 14 { 15 return m_nID; 16 } 17 void setId(int nId) 18 { 19 m_nID = nId; 20 } 21 QString getName() const 22 { 23 return m_name; 24 } 25 void setName(QString name) 26 { 27 m_name = name; 28 } 29 QString getDepartment() const 30 { 31 return m_department; 32 } 33 void setDepartment(QString department) 34 { 35 m_department = department; 36 } 37 38 bool operator ==(const Student& student) const 39 { 40 return (student.getId() == m_nID && 41 student.getName() == m_name && 42 student.getDepartment() == m_department); 43 } 44 45 private: 46 int m_nID; 47 QString m_name; 48 QString m_department; 49 }; 50 51 class School 52 { 53 public: 54 School() 55 { 56 for (int i = 1; i < MAX_STUDENT_COUNT + 1; ++i) 57 { 58 m_students.append(*(new Student(i))); 59 } 60 } 61 62 // 获取到的仅仅只是一个副本 63 const QList<Student> getStudents() 64 { 65 return m_students; 66 } 67 68 void addStudent(Student student) 69 { 70 m_students.append(student); 71 } 72 73 void removeStudent(int nId) 74 { 75 QList<Student>::const_iterator cIter = m_students.cbegin(); 76 while (cIter != m_students.cend()) 77 { 78 if ((*cIter).getId() == nId) 79 { 80 m_students.removeOne(*cIter); 81 return; 82 } 83 ++cIter; 84 } 85 } 86 87 private: 88 QList<Student> m_students; // 集合 89 }; 90 91 /* 92 * 有个函数返回一个集合。让这个函数返回该集合的一个只读副本,并在这个类中提供添加/移除集合元素的函数。 93 */ 94 95 void main() 96 { 97 School school; 98 QList<Student> studentList = school.getStudents(); 99 Student student(22, "liu", "math"); 100 school.addStudent(student); 101 school.removeStudent(12); 102 }
【2】总结
有个函数返回一个集合。让这个函数返回该集合的一个只读副本,并在这个类中提供添加/移除集合元素的函数。
Good Good Study, Day Day Up.
顺序 选择 循环 总结
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异