在c++中定义一个人员类Person,包括姓名、性别、年龄等数据成员和用于输入、输出的成员函数,设计构造函数完成数据初始化操作。在此基础上派生出学生类Student类(增加成绩)和教师类Teacher(增加教龄),并实现对学生和教师信息的输入和输出。并设置年龄的有效性
时间: 2024-10-27 09:04:56 浏览: 36
设计一个人类person,包括人员编号和姓名等数据成员以及相关的成员函数
在 C++ 中,我们可以定义一个名为 `Person` 的基础类,包含姓名(`name`)、性别(`gender`)和年龄(`age`)等基本属性。为了处理数据的输入和输出,我们添加一些成员函数,如 `setInfo()` 和 `displayInfo()` 来分别进行数据设置和展示。同时,我们会设计构造函数 `Person(const string& name, char gender, int age)` 来初始化这些数据。
```cpp
#include <iostream>
#include <string>
class Person {
public:
// 构造函数
Person(const std::string& name, char gender, int age)
: name(name), gender(gender), age(age) {
// 验证年龄是否有效,例如年龄大于0
if (age <= 0) {
throw std::invalid_argument("Age must be greater than zero.");
}
}
// 数据成员
std::string name;
char gender;
int age;
// 成员函数 - 输入信息
void setInfo(const std::string& newName, char newGender, int newAge) {
if (newAge > 0) {
name = newName;
gender = newGender;
age = newAge;
} else {
throw std::invalid_argument("Invalid age.");
}
}
// 成员函数 - 输出信息
void displayInfo() const {
std::cout << "Name: " << name << ", Gender: " << gender << ", Age: " << age << "\n";
}
};
// 派生类 Student 和 Teacher
class Student : public Person {
public:
// 增加成绩
float score;
Student(const std::string& name, char gender, int age, float score_)
: Person(name, gender, age), score(score_) {}
void displayInfo() const override {
Person::displayInfo();
std::cout << "Score: " << score << "\n";
}
};
class Teacher : public Person {
public:
// 增加教龄
int teachingYears;
Teacher(const std::string& name, char gender, int age, int teachingYears_)
: Person(name, gender, age), teachingYears(teachingYears_) {}
void displayInfo() const override {
Person::displayInfo();
std::cout << "Teaching Years: " << teachingYears << "\n";
}
};
```
阅读全文