Прошу вашей помощи в объяснении множественного наследования. Возникают проблемы с наследованием методов. Вот пример есть метод fill(); который заполняет поля объекта ). В классе Транспорт он заполняет общие поля , и что бы не дублировать код в классах наследниках я вызываю этот метод в методе fill(); Класса сухопутный транспорт и водный транспорт. Но получаетcя если я буду реализовывать класс Амфибии мне нужно будет вызвать метод fill(); из классов сухопутный транспорт и водный транспорт. Что приведёт к вызову метода fill(); класса Транспорт дважды. Скорее всего я делаю всё не так как нужно, поэтому нуждаюсь в толковом объяснении что да как делать. Все были когда-то новичками, поэтому прошу отнестись с пониманием!
#include <iostream>
#include <stdio.h>
using namespace std;
class Transport {
public:
float weight;
float loadСapacity; // грузоподьёмность
string color;
virtual void fill() {
cout << "Enter weight: " << endl;
cin >> weight;
cout << "Enter color: " << endl;
cin >> color;
cout << "Enter load capacity: " << endl;
cin >> loadСapacity;
}
void beep() {
cout << "Beeep-beeep";
}
public:
};
class LandTransport : public virtual Transport { //назевемный транспорт
protected:
void fillOnlyLand(){
cout << endl;
cout << "Enter number Of Wheels: ";
cin >> numberOfWheels;
cout << "Enter land speed: ";
}
int numberOfWheels,landSpeed; // колличество колёс, cкорость на суше
void fill()override{
Transport::fill();
fillOnlyLand();
}
void drive() {
cout << "Brrrrr I'm going by land....... "<<endl;
}
};
class WaterTransport:public virtual Transport{ // Водный транспорт
public:
float displacement,waterSpeed; // водоизмещение,скорость на воде
void fill()override{
Transport::fill();
cout << "Enter displacement: ";
cin >> displacement;
cout << "Enter water Speed ";
cin >>waterSpeed;
}
void swimming() {
cout << "Yuhhu I'm swimming"<<endl;
}
};
class Amphibian:public LandTransport, public WaterTransport{ // машины-амфибии
void fill()override{
}
};
int main() {
cin.get();
cin.get();
return 0;
}
Собственно у вас в коде уже есть намёк на решение. Нужно иметь в промежуточных классах функцию заполнения только специфической информации (без базовой части Transport). Например, я вижу функцию fillOnlyLand() для LandTransport. Аналогичную надо завести и для WaterTransport. А в классе амфибии для функции fill вызывать следующую цепочку:
Transport::fill();
LandTransport::fillOnlyLand();
WaterTransport::fillOnlyWater();
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости