无法在C ++子类中使用虚拟函数

问题描述 投票:0回答:1

我正在制作一个虚拟功能程序,其中人,教授和学生三个班级。人被两个教授公开继承。在这里我想在教授和学生中输入一些参数。为了输入和输出它们,我在每个类中都做了getdataputdata。在个人课堂上,这些功能是虚拟定义的。但是在代码中我出现了一些错误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(){
c++ c++14 virtual-inheritance
1个回答
1
投票

此功能:

void pushdata()
    {
        cout<<name<<" "<<age<<" "<<publications<<"\n";
    }

是否不是覆盖putdata中的纯虚函数Person

代替做:

void putdata() override
    {
        cout<<name<<" "<<age<<" "<<publications<<"\n";
    }

请注意,如果将override放在要覆盖的函数上,如果出错,编译器将给出错误。

© www.soinside.com 2019 - 2024. All rights reserved.