3

システムプログラミングの宿題をやっています。私は大学を実装する必要があります。子クラスの ComputerScience コース クラス、PG コース クラス、および選択コース クラスを含む Course クラスがあります。

class Course
{
public:
    virtual void teach();
    virtual void reg(Student &s)=0;
    std::string getName();
    std::string getDepartment();
    int getSemester();
    int getMinGrade();
    void addStudent(Student *s);
    void removeStudent(Student *s);

protected:
    std::string _department;
    std::string _name;
    int _semester;
    int _minGrade;
    std::vector<Student*> studentsList;  
};

class CSCourse : public Course
{
public:
    CSCourse();
    CSCourse(std::string department, std::string name, int semester, int mingrade);
    ~CSCourse();
    std::string getName();
    std::string getDepartment();
    int getSemester();
    int getMinGrade();
    void addStudent(Student *s);
    void removeStudent(Student *s);
};

(PG コースと選択コースの子クラスは同じです) Course クラスの関数 (getSemester などのように void ではありません) では、どのタイプのコースかを把握するために dynamic_cast を実行するだけです。

私はこの問題を抱えています:

courseVector は次のとおりです。

std::vector<Course*> coursesVector

dp 変数は、CS、PG、または選択科目のいずれかを含む文字列です。主に、私はこれを行います:

if (dp == "CS")
{
    CSCourse *csCourse = new CSCourse(dp, name, semester, minGrade);
    coursesVector.push_back(csCourse);
}

「抽象型CSコースのオブジェクトを割り当てられません」と表示されます。PG と Elective についても同じことが言えます。

しかし、私のクラスの定義では、CS コースは抽象的ではありません。

4

3 に答える 3

11

CSCourseクラス抽象的です。

regで純粋仮想関数を宣言しましたCourseが、で実装を提供していませんCSCourse

あなたのコンパイラは間違いなくこれも正確に教えてくれました。

于 2012-11-16T18:01:41.490 に答える
1

正常な抽象クラスから継承していますが、基本クラスが定義する純粋仮想関数を実装することはありません。

また、基本クラスに仮想デストラクタが必要です;)

編集:派生クラス関数のほとんどを再宣言するなど、おそらく必要ではない他のことも行っています。それらの実装はあなたの基本クラスとまったく同じだと思いますか?

于 2012-11-16T18:01:32.173 に答える
1

reg派生クラスに純粋仮想関数を実装していません。

virtual void reg(Student &s)=0;

そうです、あなたのクラスは抽象的です。

于 2012-11-16T18:01:45.543 に答える