Как мне получить доступ к элементам данных производного класса при создании указателя базового класса для хранения производного класса?

#c #class #inheritance #new-operator #public-method

#c #класс #наследование #new-operator #public-method

Вопрос:

У меня есть класс Airplane:

 class Airplane {
    private:
        int value;
   public:
        // some public functions that arent relevant
};
  

а затем другой класс, производный от Airplane

 class Model : public Airplane {
    private:
        bool fla&;
    public:
       // some functions
};
  

Что мне нужно сделать, это создать указатель типа airplane, который указывает на дочерний класс, он же model.

Вот так: Airplane* A = new Model(); Затем я могу использовать A-&&t; functions для доступа к общедоступным функциям airplane для изменения элементов личных данных airplane.

Моя проблема в том, что мне нужно изменить элементы личных данных модели. Я создал открытые функции-члены в модели, чтобы изменить закрытые члены модели, но это не позволяет мне выполнять A-&&t;modelfunctions. Есть ли способ изменить закрытые элементы модели в моей системе выше?

Моими инструкциями было создать динамический экземпляр модели и сохранить адрес в указателе самолета. Я хочу сделать это, имея возможность изменять частные переменные из обоих классов либо напрямую, либо через общедоступные функции. Прямо сейчас я могу изменить «значение» из airplane, но не «флаг» из model, используя систему Airplane* A = new Model();.

Спасибо.

Комментарии:

1. Вам нужно сделать Airplane полиморфными, определив виртуальные функции-члены , а затем переопределить их в Model классе.

2. Разве вы не можете сделать переменные защищенными, а не частными? Не будут ли они по-прежнему доступны производному классу?

3. Не уверен, что полиморфизм помогает. Он хочет получить доступ к переменным как из модели, так и из самолета.

4. @AndrewTruckle переопределение может обращаться к переменным в Model и делегировать доступ к переменным в Airplane , вызывая базовую функцию.

5. @PatrickRoberts не могли бы вы привести пример того, как я делаю их виртуальными? Я все еще новичок в c , поэтому не уверен, как это сделать. Спасибо.