怎么解决继承与派生问题

设计一个建筑物类Buliding,由他派生出教学楼类TeachBuliding和宿舍楼类DormBuliding,前者包括教学楼编号、层数、教室数、总面积等基本信息,后者包括宿舍楼编号、层数、宿舍数、总面积和容纳学生总人数等基本信息。


#include <iostream>
#include <string>
using namespace std;
class Building {
public:
    Building(int num, int floors, int area) : number(num), floors(floors), area(area) {}
    virtual void showInfo() = 0; 
protected:
    int number; 
    int floors; 
    int area; 
};

class TeachBuilding : public Building {
public:
    TeachBuilding(int num, int floors, int area, int rooms) : Building(num, floors, area), rooms(rooms) {}
    virtual void showInfo() {
        cout << "教学楼编号:" << number << endl;
        cout << "层数:" << floors << endl;
        cout << "教室数:" << rooms << endl;
        cout << "总面积:" << area << endl;
    }
private:
    int rooms; 
};

class DormBuilding : public Building {
public:
    DormBuilding(int num, int floors, int area, int dorms, int capacity) : Building(num, floors, area), dorms(dorms), capacity(capacity) {}
    virtual void showInfo() {
        cout << "宿舍楼编号:" << number << endl;
        cout << "层数:" << floors << endl;
        cout << "宿舍数:" << dorms << endl;
        cout << "总面积:" << area << endl;
        cout << "容纳学生总人数:" << capacity << endl;
    }
private:
    int dorms; 
    int capacity; 
};
int main() {
    Building* building1 = new TeachBuilding(1001, 5, 500, 20);
    building1->showInfo();

    Building* building2 = new DormBuilding(2001, 10, 1000, 50, 200);
    building2->showInfo();
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    首先,建筑物类Building应该包括以下基本信息:

    • 建筑物名称
    • 建筑物地址
    • 建筑物使用年限
    • 建筑物面积

    TeachBuilding类和DormBuilding类应该继承Building类的所有基本信息,因为教学楼和宿舍楼都是建筑物,它们应该有相同的基本信息。另外,TeachBuilding和DormBuilding应该各自拥有一些独特的属性和方法,例如:

    TeachBuilding类:

    • 授课教室数量
    • 实验室数量
    • 讲坛数量
    • 教学楼特有的方法(例如,安排教室使用时间表等)

    DormBuilding类:

    • 宿舍数量
    • 单人房数量
    • 双人房数量
    • 宿舍楼特有的方法(例如,分配宿舍、管理学生宿舍等)

    以下是使用Python语言实现的示例代码:

    class Building:
        def __init__(self, name, address, age, area):
            self.name = name
            self.address = address
            self.age = age
            self.area = area
    
    class TeachBuilding(Building):
        def __init__(self, name, address, age, area, classrooms, labs, lecture_halls):
            super().__init__(name, address, age, area)
            self.classrooms = classrooms
            self.labs = labs
            self.lecture_halls = lecture_halls
    
        def arrange_schedule(self):
            # 实现安排教室使用时间表等方法
            pass
    
    class DormBuilding(Building):
        def __init__(self, name, address, age, area, dorms, single_rooms, double_rooms):
            super().__init__(name, address, age, area)
            self.dorms = dorms
            self.single_rooms = single_rooms
            self.double_rooms = double_rooms
    
        def assign_dorm(self):
            # 实现分配宿舍、管理学生宿舍等方法
            pass
    

    在这个示例代码中,Building类包括建筑物的基本信息,TeachBuilding类和DormBuilding类分别继承Building类,并且分别拥有教学楼和宿舍楼特有的属性和方法。例如,TeachBuilding类有classrooms、labs、lecture_halls属性和arrange_schedule()方法,DormBuilding类有dorms、single_rooms、double_rooms属性和assign_dorm()方法。这样,我们就可以更好地设计Buliding类,使其可以更好地派生出TeachBuliding和DormBuliding类。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^