我们有一个名为Student的父类。我们有一个孩子班:StudentCS。覆盖虚函数不工作,头文件和C++文件
Student.h:
#include <iostream.h>
#include<string.h>
#include<vector.h>
#include "Course.h"
class Course;
class Student {
public:
Student();
Student(int id, std::string dep, std::string image,int elective);
virtual ~Student();
virtual void Study(Course &c) const; // this is the function we have a problem with
void setFailed(bool f);
[...]
};
Student.cpp:
#include "Student.h"
[...]
void Student::Study(Course &c) const {
}
我们有StudentCS.h:
#include "Student.h"
class StudentCS : public Student {
public:
StudentCS();
virtual ~StudentCS();
StudentCS (int id, std::string dep, std::string image,int elective);
void Study(Course &c) const;
void Print();
};
而且StudentCS.cpp:
void StudentCS:: Study (Course &c) const{
//25% to not handle the pressure!
int r = rand()% 100 + 1;
cout << r << endl;
if (r<25) {
cout << student_id << " quits course " << c.getName() << endl;
}
}
我们的主要创建学生:
Student *s;
vector <Student> uniStudent;
[...]
if(dep == "CS")
s = new StudentCS(student_id,dep,img,elective_cs);
else
s = new StudentPG(student_id,dep,img,elective_pg);
uniStudent.push_back(*s);
然后我们调用学习,但我们得到的代研究,而不是孩子! 请帮忙!
代码编译,但在运行uniStudent.Study叫()时,它使用的父母,而不是孩子
你会永远在你的程序中调用学生虚函数吗?让学生成为一个抽象的基类并将学习设置为一个纯虚函数可能是一个好主意。 –
我们将使用学生的功能。当我尝试通过做[虚拟无效研究(课程&c) =0;]并删除.cpp文件中的植入)来尝试研究纯虚函数时,它没有编译。 –
它确实没有编译,因为父方法是这意味着虚拟invokation不起作用,因此'StudentCS'错过了它的虚表。 – Jack