Dyikot
@Dyikot

Можно так сделать с interface?

Мне нужно чтобы мог передавать interface в качестве аргумента метода/функции (для этого получается нужно наследование public), чтобы его методы были не public в классах наследниках. И получается использовать interface в функция/методах. Но получается что моя цель реализвуется лишь при protected полях interface. И мне приходится делать необходимые классы и функциия дружественными.

А зачем мне это все? У меня есть свои реализованные queue и priority queue, и мне нужно их передавать в функцию где они заполняются + выводятся + удаляются + выводятся. И чтобы не писать один и тот же код два раза я реши сделать интерфейс. Но хотелось бы чтобы его поля были public, чтобы не добавлять новые дружественные функция и классы.
  • Вопрос задан
  • 189 просмотров
Решения вопроса 2
Vindicar
@Vindicar
RTFM!
Ты хочешь странного. Но ты можешь сделать класс-посредник, который будет дружественным к "владельцу" (основному классу), и будет предоставлять доступ к защищенным методам владельца. А в остальные функции уже передавать этого посредника. Этакий Public Морозов.

Но лучше еще раз подумать, зачем тебе доступ к защищенному контенту класса вне этого класса. Или доступ не нужен, или контент не должен быть защищённым.
Ответ написан
Комментировать
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
По уму, вам надо продумать ваш интерфейс. И тогда подобных извращений не понадобится. Дабавьте туда какой-нибудь способ для итерации по структуре данных для вывода. Или вообще сделайте метод ToString, который бы возвращал строковое представление внутренней структуры для вывода. Это все, естественно, виртуальные публичные методы, переопределенные в двух реализациях.

То же и со вводом. Если надо как-то во внутренности очереди залезать и обычными push это не сделать, то, например, передавайте в метод CreateFromData() вектор введенных пользователем значений.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Adamos
@Adamos
Private и Protected - это не враги программиста, мешающие ему работать, а друзья, помогающие исключить ненужное из взаимодействия между классами и гарантировать, что никто его туда случайно не вытащит.
Попрактикуйтесь в паттернах, разделите класс, который должен быть семиугольным треугольником, на непротиворечивые части - и не выдумывайте, как обмануть правила, для вашей же пользы и созданные.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы