Как наследовать методы от родительского класса в C ++ - PullRequest
0 голосов
/ 17 апреля 2010

При наследовании классов в C ++ я понимаю, что члены наследуются. Но как наследовать методы?

Например, в приведенном ниже коде я бы хотел, чтобы метод "getValues" был доступен не только через CPoly, но и через любой класс, который его наследует. Таким образом, можно напрямую вызвать getValues ​​в CRect.

class CPoly {
  private:
    int width, height;
  public:
    void getValues (int* a, int* b)
      { *a=width; *b=height;}
  };

class CRect: public CPoly {
  public:
    int area ()
      { return (width * height); }
  };

Другими словами, есть ли способ наследовать методы для простых обобщенных методов, таких как методы получения и установки?

Ответы [ 2 ]

5 голосов
/ 17 апреля 2010

Вы можете вызвать getValues с помощью CRect, потому что getValues наследуется. Термин «методы» не определен в C ++. Если вы ссылаетесь на нестатические функции-члены - они являются членами и наследуются от производных классов.

Ваша ошибка не в том, что getValues не наследуется, а в том, что вы пытаетесь получить доступ к недоступным членам width и height.

0 голосов
/ 17 апреля 2010

Все наследуется, в этом отношении нет различий между переменными-членами и функциями-членами.

В CPoly, если вы хотите, чтобы люди, которые используют ваш класс, видели членов (функции или переменные), которые вы используете public. Для классов, производных от CPoly, если вы хотите, чтобы они могли использовать члены (функции или переменные), то вы должны сделать их либо public, либо protected.

В производном типе CRect при указании базового класса вы также должны указать элемент доступа по умолчанию для всех унаследованных членов (будь то функции или переменные). если вы укажете public, все унаследованные члены public останутся public. Если вы укажете protected, все унаследованные члены, которые являются public или protected, будут protected. Если вы укажете private, все унаследованные члены станут private.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...