Возможно ли с помощью наследования создать в классе обьект родительского класса?

Возможно ли с помощью наследования создать в классе обьект родительского класса и если да,то как к нему можно обратиться?

Код:

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 шт):

Автор решения: V-Mor

Если я правильно Вас понял, то как-то вот так, например:

#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, как и весь прочий "лишний" код сделан для демонстрации того, что объекты действительно созданы и работают, как и следует работать обычным объектам классов.

→ Ссылка
Автор решения: dIm0n

Да, можно создать. Обратиться вот так вот:

#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';
}

Лучше для ваших целей использовать агрерирование, как и было. Похожий вопрос

→ Ссылка