Прошу вашей помощи в объяснении множественного наследования. Возникают проблемы с наследованием методов. Вот пример есть метод 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();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
QtCreator не видит библиотеку QImage, хотя сам мне её предлагает в списке