Возможно ли с помощью наследования создать в классе обьект родительского класса?
Возможно ли с помощью наследования создать в классе обьект родительского класса и если да,то как к нему можно обратиться?
Код:
class Plane//родитель
{
public:
Plane()=default;
~Plane() = default;
std::string getNumber() const { return number; }
std::string getBrand()const { return brand; }
std::string getReleaseDate()const { return releaseDate; }
double getCarrying()const { return carrying; }
size_t getPassengersCount()const { return passengersCount; }
friend std::istream& operator>>(std::istream& in, Plane&);
friend std::ostream& operator<<(std::ostream& out, const Plane&);
void changeItem();
private:
std::string number;
std::string brand;
std::string releaseDate;
int carrying;
int passengersCount;
};
class Pilot//родитель
{
public:
Pilot() = default;
~Pilot() = default;
std::string getSurname()const { return surname; }
size_t getworkExperienceYears() const { return workExperienceYears; }
std::string getAddress()const { return address; }
std::string getDateOfBirth()const { return DateOfBirth; }
double getSalary()const { return salary; }
friend std::istream& operator>>(std::istream& in, Pilot&);
friend std::ostream& operator<<(std::ostream& out, const Pilot&);
void changeItem();
private:
std::string surname;
size_t workExperienceYears;
std::string address;
std::string DateOfBirth;
double salary;
};
В классе наследнике были созданы 2 поля, куда я раньше просто присваивал объект класса, но хочу реализовать это с помощью наследования:
class Flight :Pilot,Plane
{
public:
Flight() = default;
~Flight() = default;
void setPilotandPlane(Pilot& pi, Plane& pl) { static_cast<Pilot&>( this), plane = pl; pilotSurname = pi.getSurname(), planeNumber = pl.getNumber(), planeBrand = pl.getBrand(), cargoWeight = pl.getCarrying(); }
void changeItem();
std::string getflightNumber()const { return flightNumber; }
std::string getFinishDate()const { return finishDate; }
std::string getStartDate() const { return startDate; }
std::string getPilotSurname()const { return pilotSurname; }
std::string getPlaneNumber()const { return planeNumber; }
std::string getPlaneBrand() const { return planeBrand; }
double getKm()const { return km; }
double getCost()const { return cost; }
std::string getStartPoint()const { return startPoint; }
std::string getFinishPoint() const { return finishPoint; }
size_t getCountOfStops() const { return countOfStops; }
size_t getCountOfSoldTickets() const { return countOfSoldTickets; }
size_t getCargoWeight() const { return cargoWeight; }
Pilot& getPilot() { return pilot; };
Plane& getPlane() { return plane; };
friend std::istream& operator>>(std::istream& in, Flight& flight);
friend std::ostream& operator<<(std::ostream& out, const Flight& flight);
protected:
/*Pilot pilot;
Plane plane;*/
std::string flightNumber;
std::string finishDate;
std::string startDate;
std::string pilotSurname;
std::string planeNumber;
std::string planeBrand;
double km;
double cost;
std::string startPoint;
std::string finishPoint;
size_t countOfStops;
size_t countOfSoldTickets;
size_t cargoWeight;
};
Ответы (2 шт):
Если я правильно Вас понял, то как-то вот так, например:
#include <iostream>
class A // Базовый класс
{
int x = 5;
public:
int getX()
{
return x;
}
};
class B : A // Наследник
{
public:
A makeSomeA()
{
return A(); // Создаёт в классе B объект родительского класса B
}
};
int main()
{
B b;
A a = b.makeSomeA(); // Обращается (получает) созданный объект
std::cout << a.getX() << std::endl;
getchar();
}
P.S. Значение элемента x, как и весь прочий "лишний" код сделан для демонстрации того, что объекты действительно созданы и работают, как и следует работать обычным объектам классов.
Да, можно создать. Обратиться вот так вот:
#include <iostream>
struct A {
int x = 42;
};
struct B : A {
A a;
} b;
int main() {
std::cout << b.a.x << '\n';
}
Обращение к члену базового класса без создания экзмепляра базового класса:
#include <iostream>
struct A {
int x = 42;
};
struct B : A {
} b;
int main() {
std::cout << b.A::x << '\n';
}
Лучше для ваших целей использовать агрерирование, как и было. Похожий вопрос