如何定义基类?

时间:2014-03-04 21:41:48

标签: visual-c++ inheritance

我收到一个名为C2504的错误:'MyCourse':基类未定义

我有3个班级,但他们都需要彼此分享一些信息:

 #include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <vector>
#include <string>
using namespace std;

class MyStudent : public MyCourse {
   public :
     vector<double> assignScores;
     vector<double> testScores;
     string getName();
     string getAssignName();
     string getTestName();
     int getAssignScale();
     int getTestScale();
     void calcAssignPercentage();
     void calcTestPercentage();
     void addAssignScore(double sc);
     void addTestScore(double sc);
     void toStringDisplay();
};

class MyCourse : public MyStudent {
public:
    string courseName;
    vector <MyStudent> allStudents;
    void addStudent();
    void toStringDisplay();
    void addAssignAll();
    void addTestAll();
};



class MyDriver1 : public MyCourse, public MyStudent
{
public :
    void student();
    void assignment();
    void test();
    void show();
    void help();
    void quit();
};

当每个基类延伸到另一个基类时,如何才能有基类?

2 个答案:

答案 0 :(得分:2)

您的继承层次结构中有循环引用。这在C ++中是不允许的,无论如何它都没有意义。继承用于模拟“is-a”关系。如果B延伸A,则BA的更具体示例。在这种情况下,A怎么可能是A更具体的例子?

您需要重新考虑您实际尝试在此处建模的内容,并相应地设计您的类层次结构。学生是一门课程,而一门课程一名学生。继承不是建立这种关系的适当工具。

课程包含已注册学生的列表。对此进行建模的正确方法称为composition:您的课程类应包含某种学生列表。

答案 1 :(得分:1)

class MyStudent : public MyCourse {

class MyCourse : public MyStudent {

class MyDriver1 : public MyCourse, public MyStudent

这是不好的做法。

首先,基类应该定义COMMON功能和子类继承的变量。它不应该像上面那样设置类,它们都是从彼此继承的。

从所有三个班级退后一步,问问自己,所有这些课程需要哪些共同点?

MyStudent不应该延伸MyCourseMyCourse不应该延伸MyStudent

如果您希望存储学生的课程信息,MyStudent应该在其中某处声明MyCourse个对象