我正在制作一个虚拟功能程序,其中人,教授和学生三个班级。人被两个教授公开继承。在这里我想在教授和学生中输入一些参数。为了输入和输出它们,我在每个类中都做了getdata和putdata。在个人课堂上,这些功能是虚拟定义的。但是在代码中我出现了一些错误i.ie-
Solution.cpp: In function ‘int main()’:
Solution.cpp:84:26: error: invalid new-expression of abstract class type ‘Professor’
per[i] = new Professor;
^~~~~~~~~
Solution.cpp:20:7: note: because the following virtual functions are pure within ‘Professor’:
class Professor : public Person
^~~~~~~~~
Solution.cpp:16:18: note: ‘virtual void Person::putdata()’
virtual void putdata() = 0;
^~~~~~~
Solution.cpp:87:27: error: invalid new-expression of abstract class type ‘Student’
else per[i] = new Student; // Else the current object is of type Student
^~~~~~~
Solution.cpp:42:7: note: because the following virtual functions are pure within ‘Student’:
class Student: public Person
^~~~~~~
Solution.cpp:16:18: note: ‘virtual void Person::putdata()’
virtual void putdata() = 0;
^~~~~~~
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
class Person
{
public:
string name;
int age;
virtual void getdata() = 0;
virtual void putdata() = 0;
};
class Professor : public Person
{
public:
static int cur_id;
int publications;
Professor() {
cur_id++;
}
void getdata( )
{
cin>>name>>age>>publications;
}
void pushdata()
{
cout<<name<<" "<<age<<" "<<publications<<"\n";
}
};
class Student: public Person
{
public:
static int cur_id;
int marks[6];
Student(){cur_id++;}
void getdata()
{
cin>>name>>age;
int i=0;
for(i = 0;i<6;i++)
cin>>marks[i];
}
void pushdata()
{
cout<<name<<" "<<age;
int i=0,sum=0;
for(i = 0;i<6;i++)
sum += marks[i];
cout<<" "<<sum<<" "<<cur_id;
}
};
int Professor::cur_id = 1;
int Student::cur_id = 1;
int main(){
此功能:
void pushdata()
{
cout<<name<<" "<<age<<" "<<publications<<"\n";
}
是否不是覆盖putdata
中的纯虚函数Person
。
代替做:
void putdata() override
{
cout<<name<<" "<<age<<" "<<publications<<"\n";
}
请注意,如果将override
放在要覆盖的函数上,如果出错,编译器将给出错误。