Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;多态/纯虚函数_C++_Polymorphism_Pure Virtual - Fatal编程技术网

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);