2013-09-30 3 views
0

Я пытаюсь унаследовать класс, определенный в публичной библиотеке, а перекрывая некоторые из его функций и типов членов и у меня есть несколько вопросов:наиважнейших член высшего класса

  1. Ни одна из функций не объявлены как виртуальные в суперклассе, так ли все же нормально переопределять эти функции?

  2. Могу ли я переопределить переменные-члены, просто объявив переменную с тем же именем, но с другим типом. Это то же самое, что скрывать?

  3. Кроме того, если 2 возможно, то я могу сделать следующее:

    public class A { 
        public: 
        class Member { 
         Member (//some params) {}; 
        } 
    } 
    
    class B : public A { 
        public: 
        class Member : public A::Member { 
         Member() : 
          A::Member(//some params) 
         { 
          // Some additions to B::Member 
         } 
        } 
    } 
    

Примечание: Так как я не могу изменить суперкласс шаблонный это может быть и речи.

ответ

1
  1. Если скрыть функции базового класса - вы не можете изменить их, как они не виртуальные - вы должны иметь в виду, что некоторые сценарии, такие как звонки с помощью указателя или ссылки на базовый класс будет не работают должным образом и могут дать «интересные» результаты. Вы также столкнетесь с проблемами, если деструктор не является виртуальным, и вы пытаетесь уничтожить производный объект с помощью указателя на базовый класс.

  2. Вы будете скрывать член базового класса с тем же именем, но опять же очень вероятно, что он не будет делать то, что вы ожидаете. Реализация базового класса по-прежнему будет ссылаться на элемент базового класса, тогда как реализация производного класса будет ссылаться на член производного класса.

  3. No.

Вы можете посмотреть в оберточную класс «базовый», вместо того, чтобы пытаться извлечь из него.

1
  1. вы переопределяете виртуальные функции. если это не так, ты скрываешься.

  2. имя скрыто.

  3. нет вы не можете.

1
  1. Нет, вы не можете изменить их. Это будет просто скрывать их.
  2. Это не главное, оно скрывается.
  3. Вы не можете.
Смежные вопросы