建立一个Person类和学生类

本文通过具体的Java代码示例,详细解析了面向对象编程的基本概念,包括类的定义、属性和方法的使用,以及继承的概念。通过Person和Student类的实现,展示了如何创建对象、初始化属性,并使用继承来扩展类的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


    class Person{
	String name;
	String addr;
	char sex;
	int age;
	public Person(String name,String addr,char sex,int age){
		System.out.println("姓名:"+name+"  地址:"+addr+"  性别:"+sex+"  年龄:"+age);
		this.name=name;
		this.addr=addr;
		this.sex=sex;
		this.age=age;
	}
	public Person(String name,char sex){
		System.out.println("姓名:"+name+"  性别:"+sex);
		this.name=name;
		this.sex=sex;
	}
	public Person(){
	}
	public void getinfo(){
		System.out.println("姓名:"+name+"  地址:"+addr+"  性别:"+sex+"  年龄:"+age);
	}
}
class Student extends Person{
	float math;
	float english;
	public Student(String name,String addr,char sex,int age,float math,float english){
		super(name,addr,sex,age);
		this.math=math;
		this.english=english;
	}
	public Student(String name,char sex){
		System.out.println("姓名:"+name+"  性别:"+sex);
	}
	public Student(){
		
	}
	public void getinfo(){
		System.out.println("姓名:"+name+"  地址:"+addr+"  性别:"+sex+"  年龄:"+age+"  数学成绩:"+math+"  英语成绩:"+english);
	}
}
public class t63 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person p=new Person("里西斯","上海",'男',34);
		Student s1=new Student("赵晓赵",'女');
		Student s2=new Student("赵小赵","河北",'女',18,100,100);
		Student s3=new Student("赵小小赵","云南",'女',17,100,100);
		Student s4=new Student("赵晓小小赵","北京",'女',16,100,100);
		Student s5=new Student("赵小小小赵","桂林",'女',13,100,100);
		
	}

}

<think>好的,我需要设计一个继承体系,包含个人、学生、老师后勤这几个。首先,我应该确定基派生的关系。通常来说,个人(Person)可以作为基,而学生(Student)、老师(Teacher)后勤(Staff)都是个人的具体型,因此应该继承自Person。 接下来,我需要考虑各个的成员变量方法。基Person应该包含所有派生共有的属性,比如姓名、年龄、性别等。然后每个派生添加自己特有的属性。例如,学生可能有学号专业,老师可能有工号所教科目,后勤可能有部门职位。 在C++中,继承使用冒号(:)后跟访问修饰符名称。这里,学生、老师、后勤都应该以public方式继承Person,以保证基的公有成员在派生中仍然是公有的。 然后,构造函数方面,每个派生的构造函数需要先调用基的构造函数,初始化基部分的成员,然后再初始化自己的成员变量。这可以通过成员初始化列表来实现。 另外,为了展示多态性,可能需要在基中声明虚函数,比如一个显示信息的函数display(),然后在各个派生中重写这个函数。这样通过基指针或引用调用时,会根据实际对象型调用对应的函数。 考虑代码结构,首先定义Person,包含私有成员name、age、gender,以及公有的构造函数虚函数display()。然后每个派生继承Person,添加自己的私有成员,并重写display()方法。 最后,在主函数中创建各个派生的对象,并通过基指针或引用来调用display(),验证多态行为是否正确。 现在编写具体的代码: 基Person: - 私有成员:name(字符串)、age(整型)、gender(字符串) - 公有构造函数,初始化这三个属性 - 虚函数display(),输出基本信息 派生Student: - 继承Person - 私有成员:studentID(字符串)、major(字符串) - 构造函数调用基构造函数,并初始化自己的成员 - 重写display(),先调用基的display(),再输出学号专业 派生Teacher: - 似Student,添加employeeIDsubject 派生Staff: - 添加departmentposition 主函数中创建各对象,并调用它们的display()方法,或者通过基指针数组来统一调用,展示多态。 可能需要注意的点: 1. 虚析构函数:如果通过基指针删除派生对象,需要将基的析构函数声明为虚函数,避免内存泄漏。 2. 访问控制:确保派生可以访问基的protected成员,或者通过公有方法获取私有成员。</think><< 以下是实现继承关系 `个人 -> 学生/老师/后勤` 的C++代码示例: ```cpp #include <iostream> #include <string> using namespace std; // 基:个人 class Person { protected: string name; int age; string gender; public: Person(const string& n, int a, const string& g) : name(n), age(a), gender(g) {} virtual void display() const { cout << "姓名: " << name << "\n年龄: " << age << "\n性别: " << gender << endl; } virtual ~Person() {} // 虚析构函数确保正确释放派生资源 }; // 学生 class Student : public Person { private: string studentID; string major; public: Student(const string& n, int a, const string& g, const string& id, const string& m) : Person(n, a, g), studentID(id), major(m) {} void display() const override { Person::display(); cout << "学号: " << studentID << "\n专业: " << major << endl; } }; // 教师 class Teacher : public Person { private: string employeeID; string subject; public: Teacher(const string& n, int a, const string& g, const string& id, const string& s) : Person(n, a, g), employeeID(id), subject(s) {} void display() const override { Person::display(); cout << "工号: " << employeeID << "\n教授科目: " << subject << endl; } }; // 后勤 class Staff : public Person { private: string department; string position; public: Staff(const string& n, int a, const string& g, const string& dept, const string& pos) : Person(n, a, g), department(dept), position(pos) {} void display() const override { Person::display(); cout << "部门: " << department << "\n职位: " << position << endl; } }; int main() { // 创建不同对象 Student s("张三", 20, "男", "2023001", "计算机科学"); Teacher t("李老师", 45, "女", "T001", "数据结构"); Staff st("王师傅", 38, "男", "后勤部", "维修主管"); // 多态演示 Person* people[] = {&s, &t, &st}; for (auto p : people) { p->display(); cout << "------------------\n"; } return 0; } ``` **代码解释**: 1. **基设计**:`Person` 包含所有人的共有属性(姓名、年龄、性别) 2. **继承关系**:使用 `public` 继承保证基成员的访问权限不变 3. **多态实现**: - 使用 `virtual` 关键字声明虚函数 `display()` - 派生使用 `override` 明确表示重写虚函数 - 通过基指针数组统一管理不同派生对象 4. **虚析构函数**:确保通过基指针删除对象时能正确调用派生析构函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值