以下是一个涉及指针、类、循环、继承、数组、函数等方面的C++题目,并提供了一个源程序,超过了五十行。这个例子模拟了一个简单的学生管理系统,包括学生基类和研究生派生类。
题目:
考虑一个学生管理系统,设计一个C++程序,包括以下功能:
创建一个基类 Student
,包括学生的基本信息(如姓名、学号、年龄等)以及一个纯虚函数 displayDetails
用于显示学生信息。
创建一个派生类 GraduateStudent
继承自基类 Student
,其中新增一个成员变量 researchTopic
表示研究生的研究课题,并重写 displayDetails
函数以适应研究生的信息展示。
创建一个函数 displayAllStudents
,该函数接受一个学生数组(可包含普通学生和研究生),遍历数组,调用每个学生的 displayDetails
函数以显示学生信息。
在 main
函数中,创建一个包含不同类型学生的数组,调用 displayAllStudents
函数展示所有学生信息。
源程序:
#include <iostream>
#include <string>
class Student {
protected:
std::string name;
int studentID;
int age;
public:
Student(const std::string& n, int id, int a) : name(n), studentID(id), age(a) {}
virtual void displayDetails() const = 0;
};
class GraduateStudent : public Student {
private:
std::string researchTopic;
public:
GraduateStudent(const std::string& n, int id, int a, const std::string& topic)
: Student(n, id, a), researchTopic(topic) {}
void displayDetails() const override {
std::cout << "Graduate Student Information:\n";
std::cout << "Name: " << name << "\n";
std::cout << "Student ID: " << studentID << "\n";
std::cout << "Age: " << age << "\n";
std::cout << "Research Topic: " << researchTopic << "\n";
std::cout << "---------------------\n";
}
};
void displayAllStudents(Student* students[], int size) {
for (int i = 0; i < size; ++i) {
students[i]->displayDetails();
}
}
int main() {
const int studentsSize = 3;
Student* students[studentsSize];
// 添加不同类型的学生到数组中
students[0] = new Student("Alice", 1001, 20);
students[1] = new GraduateStudent("Bob", 2001, 25, "Machine Learning");
students[2] = new GraduateStudent("Charlie", 3001, 22, "Data Science");
// 显示所有学生的信息
displayAllStudents(students, studentsSize);
// 释放动态分配的内存
for (int i = 0; i < studentsSize; ++i) {
delete students[i];
}
return 0;
}
这个例子演示了类的继承、纯虚函数、动态内存分配等概念,并且超过了五十行的源代码长度。请根据实际需求进行修改和扩展。