私は大学をプログラムするためにC++で宿題をしています。私は2つの主要な抽象クラスStudentとCourseを持っています。コースには、SoftwareEngineeringクラスなどのさまざまな子クラスがあります。Studentには、SoftwareEngineering学生クラスなどのさまざまな子クラスがあります。
現在、コースの子クラスでは、各子クラスに学生を登録する機能があります
void register(Student &s);
各コースの子クラス(ソフトウェアエンジニアリングコースクラスなど)の機能レジスタを呼び出すとき、その学生の参照をベクトルにプッシュしたいと思います。しかし、私はエラーを受け取ります
cannot allocate an object of abstract type 'Student'
Studentクラスは抽象クラスであり、SoftwareEngineeringStudentなどの子クラスがあります。しかし、私は、register関数に、SoftwareEngineeringStudentのような特定のタイプの学生ではなく、抽象オブジェクトStudentを取得させる必要があります。
これを回避する方法はありますか?
これがスケルトンです(もちろん、完全なコードではありません!):
//Course.h
class Course{
virtual void reg(Student &s)=0
}
class SoftwareEngCourse : public Course{
void reg(Student &s);
}
//Student.h
class Student{
virtual void study(Course &c)=0;
}
class SoftwareEngStudent : public Student{
void study(Course &c);
}
現在Course.cppにあります:
//Course.cpp
void SoftwareEngCourse::reg(Student &s){
vector_of_Student_object.push_back(s);
}