错误在这里:
vector<Graduate *> graduates;
graduates.push_back(new AliceUniversity(identifier,id,salary,average));
祖父母班:
Graduate::Graduate(char identifier,
long id,
int salary,
double average)
: _identifier(identifier),
_id(id),_salary(salary),
_average(average)
{
}
家长班:
UniversityGraduate::UniversityGraduate(char identifier,
long id,
int salary,
double average)
: Graduate(identifier,id,salary,average)
{
}
实际/儿童班:
AliceUniversity::AliceUniversity(char identifier,
long id,
int salary,
double average)
: UniversityGraduate(identifier,id,salary,average)
{
_graduateNum++;
_sumOfGrades += average;
_avrA = getAverage();
}
我知道这是一个很长的镜头,我不能在这里写完整个代码......
答案 0 :(得分:74)
在C ++中,至少有一个pure virtual function的类称为抽象类。您不能创建该类的对象,但可能只有指针或对它的引用。
如果您是从抽象类派生的,那么请确保覆盖并定义类的所有纯虚函数。
从您的代码段中,您的班级AliceUniversity
似乎是一个抽象类。它需要覆盖和定义类Graduate
和UniversityGraduate
的所有纯虚函数。
纯虚函数是声明结尾处= 0;
的函数。
示例:virtual void doSomething() = 0;
对于特定答案,您需要发布您获得错误的类的定义以及该类派生的类。
答案 1 :(得分:15)
您必须在其中一个父类中声明一些虚函数,并且永远不会在任何子类中实现。确保所有虚拟函数都在继承链中的某个位置实现。如果类的定义包含从未实现的纯虚函数,则无法构造该类的实例。