C++ c++;多态/纯虚函数
我有一门课叫“课程”。课程有一个指向称为评估的基类的指针C++ c++;多态/纯虚函数,c++,polymorphism,pure-virtual,C++,Polymorphism,Pure Virtual,我有一门课叫“课程”。课程有一个指向称为评估的基类的指针 class Course{ char* courseName; float fee; public: Assessment* assessment; Course(); Course(Course&); Course(char*, float, Assessment *); ~Course(); friend ostream& operator <&l
class Course{
char* courseName;
float fee;
public:
Assessment* assessment;
Course();
Course(Course&);
Course(char*, float, Assessment *);
~Course();
friend ostream& operator <<(ostream& os, Course&);
};
我的驱动程序代码如下所示
Course t = Course();
cout << *(t.assessment);
问题是,当我无法进行评估时,在评估中,您的
Course::Course()
中的运算符“超载,您永远不应该这样做
assessment = &ExamAssessment(45);
你要找一个临时工的地址。一旦超出构造函数的作用域,这将是无效的。我想编译器已经警告过你了!
这就解释了您在访问评估时的意外碰撞行为
class Course{
char* courseName;
float fee;
public:
Assessment* assessment;
Course();
Course(Course&);
Course(char*, float, Assessment *);
~Course();
friend ostream& operator <<(ostream& os, Course&);
};
做:
正如@Michael K.Sondej所说,在析构函数中删除它。或者使用。您如何知道它正在调用“评估”报告?编译器告诉我“一个纯虚拟函数被调用了”是的,它可以工作:)。仍然在某处崩溃,但它正在打印正确的lol
ostream& operator<<(ostream& os, Assessment& assessment){
assessment.Report();
os << "Course Grade: "<< assessment.grade << endl;
return os;
}
assessment = &ExamAssessment(45);
assessment = new ExamAssessment(45);