[英]c++ polymorphism/pure virtual function
我有一门课程叫做课程。 课程有一个指向名为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);
在评估中,报告是纯粹的虚拟
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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.