我想知道哪个是解决这个问题的更好方法:
一名教师可以教授不止一门学科,或者可以在实验室上课,也可以同时在一个机构中。 Lab
,Subject
,Teacher
还有其他一些变量。我没有把它们都写在这里。
可以单独添加新的 lab,subject 和 teacher
。添加教师时,我只输入 Teacher class
和 labCode
和 subCode
的所有变量。有些实验室和主题是预定义的,有些是稍后添加的。如果可用,我还可以查看显示他的实验室和主题详细信息的老师的记录。
我对c++的概念不是太强,我不知道哪个更适合这个。我应该在 Teacher 类中给出指向 Lab 和 Subject 类的指针,还是应该将它们固有,或者是否有更好的方法来做到这一点。
class Lab{
char labCode[20];
char labName[40];
int labYear;
//here default constructor
};
class Subject{
char subCode[20];
char subName[20];
int subYear;
//here default constructor
};
//-------------------------------------
class Teacher{
char facName[30];
int teacherSubCount;
int teacherLabCount;
Subject *subject;
Lab *lab;
//here default constructor
};
//------------or should i do like this--------------
class Teacher:public Lab,public Subject{
char teacherName[30];
int teacherSubCount;
int teacherLabCount;
//here default constructor
};
如果您能推荐任何教程,以便我可以学习指针的强大功能,正如我的书中所说“指针非常强大的 C++”,但它们只提供了一些简单的示例:)
最佳答案
"Favor 'object composition' over 'class inheritance'." - Gang of Four
但是,更具体到您的类(class),首先问问自己……“教师是一种实验室还是一种学科?”显然,答案是否定的。
在继承模型中,子类本身应该是父类的一个实例。考虑到 Liskov Substitution Principle ,该子对象应该被视为该父对象。因此,如果有代码正在寻找 Subject
,您可以将它传递给 Teacher
。直觉上,这没有多大意义,也不能准确表示正在建模的真实世界域实体。
在这种情况下,您肯定需要对象组合而不是类继承。 Teacher
有一个 Lab
并且有一个 Subject
,不是一个 Lab
或是一个 Subject
。事实上,如果 Teacher
可以 拥有 多个 Lab
或 Subject
,那么组合将简单地从单个改变实例类成员到数组或某种列表。而在这种情况下,继承方法将完全失效。
当像这样对代表现实世界概念的对象建模时,首先要考虑对这些现实世界概念的直觉,其次是实现的技术捷径。如果它在建模方面没有意义,那么它在代码中也没有意义。
关于c++ - 哪个更好,指向其他类的指针或从该类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11955856/