C ++: выборочно ограничить доступ к методам суперкласса? - PullRequest
8 голосов
/ 09 марта 2011

Это вопрос интервью.Я еще не эксперт по C ++, поэтому мне нужна помощь в поиске ответа на этот вопрос (сначала я хочу понять вопрос ... это правильный вопрос?)

Вопрос:

Предположим, у меня есть класс B, производный от класса A, и я хотел бы повторно использовать некоторые, но не все методы A. Как бы я ограничил доступ к методам суперкласса выборочно?

спасибо!

Ответы [ 2 ]

10 голосов
/ 09 марта 2011

Я предполагаю, что

  1. Вы не можете изменить определение A
  2. вы хотите выбрать, какие методы из A должны быть доступны из B объекта.

Директива using решает вашу проблему. Пример:

class A
{
public: // or protected for that matter
    void foo();
    void bar();
};

class B : private A // or protected, depending on whether
                    // you want subclasses of B to expose
                    // some methods from A themselves
{
public:
    using A::foo;
};

делает foo пригодным для использования из класса B, но не bar. Но в качестве предупреждения, обратите внимание, что using A::foo будет выставлять все перегрузки foo.

3 голосов
/ 09 марта 2011

Ответ, который они, вероятно, захотят услышать, заключается в том, что вы можете поместить методы для повторного использования в раздел protected базового класса, а методы, которые не должны быть видны производным классам, должны идти в раздел private .

Однако, сделав шаг назад, вы могли бы набрать дополнительные очки, указав, что могут быть более эффективные меры для повторного использования кода, в зависимости от того, что выполняют функции (например, использование свободных функций, которые не видны в заголовке). файл).

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