c++ - 哪个更好,指向其他类的指针或从该类继承

标签 c++ class inheritance pointers

我想知道哪个是解决这个问题的更好方法:

一名教师可以教授不止一门学科,或者可以在实验室上课,也可以同时在一个机构中。 Lab,Subject,Teacher 还有其他一些变量。我没有把它们都写在这里。 可以单独添加新的 lab,subject 和 teacher。添加教师时,我只输入 Teacher classlabCodesubCode 的所有变量。有些实验室和主题是预定义的,有些是稍后添加的。如果可用,我还可以查看显示他的实验室和主题详细信息的老师的记录。

我对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 可以 拥有 多个 LabSubject,那么组合将简单地从单个改变实例类成员到数组或某种列表。而在这种情况下,继承方法将完全失效。

当像这样对代表现实世界概念的对象建模时,首先要考虑对这些现实世界概念的直觉,其次是实现的技术捷径。如果它在建模方面没有意义,那么它在代码中也没有意义。

关于c++ - 哪个更好,指向其他类的指针或从该类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11955856/

相关文章:

scala - 使用带有一些基类、抽象类或特征参数化列表的类型类的最佳方法

java - DAO接口(interface): Implementation for 2 entities (Java, hibernate )

c# - NUnit:无法加载文件或程序集 'some.dll' 或其依赖项之一。指定的模块无法找到

c# - 在 C# 中包装 Visual C++

c++ - 定义与声明类

reactjs - 将 React 类函数存储在单独的文件中

c++ - Eclipse CDT C++ - [Main] 程序未指定

c++ - 不能从同一类的另一个构造函数调用具有所有默认参数的显式构造函数

c++ - 单个成员而不是全类的 friend 声明?

Python:变量、继承和默认参数