У меня есть домашнее задание с заданным кодом main.cpp, которое нельзя изменять. Согласно этому main.cpp и простому примеру input и output (ниже), я должен завершить программу. Мои попытки: я пытаюсь создать 4 класса, класс Person; рабочий класса; ученик класса; класс InService; в моей основной функции через создание экземпляра объекта класса InService я передаю 4 параметра (имя, пол, studentNo, workerNo); и с помощью указателя типа базового класса, получить желаемый результат. Это сообщение об ошибке: [Ошибка] нет уникального окончательного переопределения для «виртуального std :: string Person :: getName ()» в «InService»
[Ошибка] нет уникальной окончательной переопределения для 'virtual int Person :: getSex ()' в 'InService'
Я пытался использовать виртуальное наследование для этого, но я не могу понять, как решить эту проблему. Я провел некоторое исследование по виртуальному наследованию и сослался на других экспертов ответов , но все еще путался со всем ООП.
//Inservice.h
#include<string>
using namespace std;
class Person{
public:
Person();
~Person();
string name;
int sex;
virtual string getName() = 0;
virtual int getSex() = 0;
};
///////////////////////////////////////////////////
class Student:virtual public Person{
public:
Student();
~Student();
string sno;
virtual string getName() {
return name;
}
virtual int getSex(){
return sex;
}
string getSno(){
return sno;
}
};
//////////////////////////////////////////////////
class Worker:virtual public Person{
public:
Worker();
~Worker();
string wno;
virtual std::string getName(){
return name;
}
virtual int getSex(){
return sex;
}
string getWno(){
return wno;
}
};
///////////////////////////////////////////////////////
class InService: public Student, public Worker{
public:
InService(string _name, int _sex, string _sno, string _wno){
Person::name = _name;
Person::sex - _sex;
Worker::wno = _wno;
Student::sno = _sno;
}
};
///////////////////////////////////////////////////////
//main.cpp
#include <iostream>
#include "inservice.h"
using namespace std;
int main() {
string name, sno, wno;
int sex;
cin >> name;
cin >> sex;
cin >> sno;
cin >> wno;
InService is(name, sex, sno, wno);
Person* p = &is;
Student* s = &is;
Worker* w = &is;
cout << p->getName() << endl;
cout << p->getSex() << endl;
cout << s->getName() << endl;
cout << s->getSex() << endl;
cout << s->getSno() << endl;
cout << w->getName() << endl;
cout << w->getSex() << endl;
cout << w->getWno() << endl;
return 0;
}
Предположим, мой вход:
Jack
1 //1-for male; 0 -for female
12345678 //studentNo
87654321 //workerNo
Я ожидаю, что результат будет:
Jack
1
12345678
Jack
1
87654321