gpt4 book ai didi

C++多态/纯虚函数

转载 作者:行者123 更新时间:2023-11-28 03:04:03 25 4
gpt4 key购买 nike

我有一门课叫做类(class)。 Course 有一个指向名为 Assessment 的基类的指针。

class Course{
char* courseName;
float fee;

public:
Assessment* assessment;
Course();
Course(Course&);
Course(char*, float, Assessment *);
~Course();
friend ostream& operator <<(ostream& os, Course&);
};

出于测试目的,在构造函数中我将评估指针分配给 ExamAssessment(子类)

Course::Course(){
courseName = "something";
fee = 0;
assessment = &ExamAssessment(45);
}

我的驱动代码是这样的

Course t = Course();
cout << *(t.assessment);

在评估中,Report是纯虚拟的

virtual void Report() = 0;

问题是当我计算评估时,在评估重载运算符“<<”中,我正在调用 Report()

ostream& operator<<(ostream& os, Assessment& assessment){
assessment.Report();
os << "Course Grade: "<< assessment.grade << endl;
return os;
}

但报告称“评估”报告而不是考试评估报告。不确定我哪里出了问题(我对 C++ 继承相当陌生)

最佳答案

在你的 Course::Course() 中你永远不应该那样做

 assessment = &ExamAssessment(45);

您正在获取临时地址。一旦您超出构造函数范围,那将是无效的。而且我认为编译器警告过你!这解释了您在访问评估时出现的意外崩溃行为。

做:

 assessment = new ExamAssessment(45);

正如@Michael K. Sondej 所说,在析构函数中将其删除。或者使用 std::unique_ptr .

关于C++多态/纯虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20125919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com