解释下面地代码class Topic { public: Topic(string tname, string tdesc) : name(tname), desc(tdesc), selected(false) {} string getName() const { return name; } string getDesc() const { return desc; } bool isSelected() const { return selected; } void setSelected(bool flag) { selected = flag; }
时间: 2024-03-26 10:37:42 浏览: 43
这段代码定义了一个类Topic,包含了以下成员函数:
1. 构造函数Topic(string tname, string tdesc):用于创建Topic对象,需要传入课题名称tname和课题描述tdesc,同时将selected属性初始化为false(即未被选中)。
2. 成员函数string getName() const:用于获取课题名称name。
3. 成员函数string getDesc() const:用于获取课题描述desc。
4. 成员函数bool isSelected() const:用于获取课题是否被选中的状态selected。
5. 成员函数void setSelected(bool flag):用于设置课题是否被选中的状态selected,需要传入一个bool类型的flag作为参数,true表示被选中,false表示未被选中。
这些成员函数用于对Topic对象的属性进行访问和修改。
相关问题
解释下面的代码#include <iostream> #include <vector> #include <string> #include<Windows.h> using namespace std; // 定义课题类 class Topic { public: Topic(string tname, string tdesc) : name(tname), desc(tdesc), selected(false) {} string getName() const { return name; } string getDesc() const { return desc; } bool isSelected() const { return selected; } void setSelected(bool flag) { selected = flag; } private: string name; // 课题名称 string desc; // 课题描述 bool selected; // 是否被选中 }; // 定义老师类 class Teacher { public: Teacher(string tname) : name(tname) {} string getName() const { return name; } void addTopic(string tname, string tdesc) { topics.push_back(Topic(tname, tdesc)); } void removeTopic(int idx) { topics.erase(topics.begin() + idx); } void modifyTopic(int idx, string tname, string tdesc) { topics[idx] = Topic(tname, tdesc); } vector<Topic>& getTopics() { return topics; } private: string name; // 老师姓名 vector<Topic> topics; // 可供选择的课题 }; // 定义学生类 class Student { public: Student(string sname) : name(sname), selectedTopic(NULL) {} string getName() const { return name; } bool selectTopic(int idx, vector<Teacher>& teachers) { if (idx >= 0 && idx < teachers.size()) { vector<Topic>& topics = teachers[idx].getTopics(); for (int i = 0; i < topics.size(); ++i) { if (!topics[i].isSelected()) { selectedTopic = &topics[i]; selectedTopic->setSelected(true); return true; } } } return false; } Topic* getSelectedTopic() const { return selectedTopic; } private: string name; // 学生姓名 Topic* selectedTopic; // 已选课题指针 }; // 打印老师的所有课题 void printTopics(const vector<Topic>& topics) { for (int i = 0; i < topics.size(); ++i) { cout << " " << i + 1 << ". " << topics[i].getName() << endl << " " << topics[i].getDesc() << endl; } }
这段代码定义了三个类:Topic、Teacher和Student。
Topic类表示一个课题,拥有名称、描述和是否被选中的属性,可以获取这些属性并设置是否被选中。Teacher类表示一个老师,拥有姓名和可供选择的课题,可以添加、删除和修改课题,并获取可供选择的课题。Student类表示一个学生,拥有姓名和已选课题指针,可以选择课题和获取已选课题。
此外,还定义了一个函数printTopics,用于打印老师的所有课题。
这些类和函数的实现可以用于学生选课系统的设计,可以让老师添加课题,学生选择课题,并打印老师的所有课题供学生选择。
1.定义virtual base class:people,要求: 数据成员:编号id,姓名name,性别sex, 联系电话tel,邮箱e_mail,出生日期bir,bir是struct结构,包括年月日; 虚函数成员:显示show(),使用恰当格式显示全部数据成员; 2.定义derived class:teacher: public virtual people,要求: 增加数据成员:学位degree,部门dep; 成员函数:显示show(),使用恰当格式显示增加的数据成员; 3.定义derived class:student: public virtual people,要求: 增加数据成员:学号sno,专业major; 成员函数:显示show(),使用恰当格式显示增加的数据成员; 4.定义derived class:course: public teacher,public student,要求: 增加数据成员:课程信息cinfo,cinfo是struct结构,包括课程名称name,课程id,选课学生s[],任课教师t; 成员函数:显示show(),使用恰当格式显示增加的数据成员;画出5个class的继承派生关系图,使用C++语言设计各个class,在下面拷贝class的代码,并添加必要的注释:
以下是代码实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
// 定义人类基类
class People {
public:
// 构造函数
People(int id, string name, string sex, string tel, string e_mail, int year, int month, int day) {
this->id = id;
this->name = name;
this->sex = sex;
this->tel = tel;
this->e_mail = e_mail;
this->bir.year = year;
this->bir.month = month;
this->bir.day = day;
}
// 虚函数显示
virtual void show() {
cout << "编号:" << id << endl;
cout << "姓名:" << name << endl;
cout << "性别:" << sex << endl;
cout << "联系电话:" << tel << endl;
cout << "电子邮箱:" << e_mail << endl;
cout << "出生日期:" << bir.year << "-" << bir.month << "-" << bir.day << endl;
}
protected:
// 数据成员
int id;
string name;
string sex;
string tel;
string e_mail;
struct Birthday {
int year;
int month;
int day;
} bir;
};
// 定义教师派生类
class Teacher : public virtual People {
public:
// 构造函数
Teacher(int id, string name, string sex, string tel, string e_mail, int year, int month, int day, string degree, string dep)
: People(id, name, sex, tel, e_mail, year, month, day), degree(degree), dep(dep) {}
// 虚函数显示
virtual void show() {
People::show(); // 调用基类的show函数
cout << "学位:" << degree << endl;
cout << "部门:" << dep << endl;
}
protected:
// 增加数据成员
string degree;
string dep;
};
// 定义学生派生类
class Student : public virtual People {
public:
// 构造函数
Student(int id, string name, string sex, string tel, string e_mail, int year, int month, int day, int sno, string major)
: People(id, name, sex, tel, e_mail, year, month, day), sno(sno), major(major) {}
// 虚函数显示
virtual void show() {
People::show(); // 调用基类的show函数
cout << "学号:" << sno << endl;
cout << "专业:" << major << endl;
}
protected:
// 增加数据成员
int sno;
string major;
};
// 定义课程派生类
class Course : public Teacher, public Student {
public:
// 构造函数
Course(int id, string name, string sex, string tel, string e_mail, int year, int month, int day, string degree, string dep, int sno, string major, string cname, int cid, string tname)
: People(id, name, sex, tel, e_mail, year, month, day), Teacher(id, name, sex, tel, e_mail, year, month, day, degree, dep), Student(id, name, sex, tel, e_mail, year, month, day, sno, major), cname(cname), cid(cid), tname(tname) {}
// 虚函数显示
virtual void show() {
People::show(); // 调用基类的show函数
cout << "课程名称:" << cname << endl;
cout << "课程ID:" << cid << endl;
cout << "选课学生:";
for (int i = 0; i < sizeof(s) / sizeof(s[0]); i++) {
cout << s[i] << " ";
}
cout << endl;
cout << "任课教师:" << tname << endl;
}
protected:
// 增加数据成员
struct CourseInfo {
string name;
int id;
string s[100];
string tname;
} cinfo;
string cname;
int cid;
string tname;
};
int main()
{
People* p1 = new Teacher(1, "张三", "男", "1234567", "zhangsan@qq.com", 1990, 1, 1, "博士", "计算机科学与技术");
People* p2 = new Student(2, "李四", "女", "2345678", "lisi@qq.com", 2000, 2, 2, 20210001, "计算机科学与技术");
People* p3 = new Course(3, "王五", "男", "3456789", "wangwu@qq.com", 1980, 3, 3, "硕士", "数学系", 20210001, "计算机科学与技术", "C++语言", 1001, "张三");
p1->show();
cout << endl;
p2->show();
cout << endl;
p3->show();
cout << endl;
delete p1;
delete p2;
delete p3;
return 0;
}
```
以下是继承关系图:
```
People
|
|-------------|
Teacher Student
|-------------|
Course
```
阅读全文