Russian Qt Forum
Ноябрь 26, 2024, 06:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Переопределения метода, использующего приватные переменные  (Прочитано 5881 раз)
unkeep
Гость
« : Июнь 10, 2013, 13:19 »

Есть базовый класс, в котором метод что-то делает используя при этом закрытые переменные класса. Я наследуюсь от базового класса и пытаюсь переопределить этот метод, но доступ к переменным я получить не могу.
Поможет ли если в базовом классе сделать переменные не private a protected?
Есть ли другие способы изменить реализацию метода не влезая в базовый класс?
« Последнее редактирование: Июнь 10, 2013, 13:49 от unkeep » Записан
Bepec
Гость
« Ответ #1 : Июнь 10, 2013, 13:22 »

Кхм. Могу врать, но если вы наследуетесь, то у вас уже есть доступ к приватным полям класса вроде.

А метод виртуальный?
Записан
unkeep
Гость
« Ответ #2 : Июнь 10, 2013, 13:25 »

Кхм. Могу врать, но если вы наследуетесь, то у вас уже есть доступ к приватным полям класса вроде.

А метод виртуальный?
метод вируальный. а при наследовании приватные(private) переменные видны но не доступны.

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

пока у меня есть три варианта:
1)унаследоваться и пререопределить нужные методы (самый правильный, но, боюсь, невозможный)
2)внести изменения в базовый класс. (не желательно)
3) создать новый класс, скопировав код из базового и в новом уже реализовать так как надо (как-то не рационально)
« Последнее редактирование: Июнь 10, 2013, 13:32 от unkeep » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Июнь 10, 2013, 13:35 »

А нужен интерфейс базового класса? Можно же через агрегацию. Вообще, нужно больше конкретики, чтобы найти лучшее решение.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Июнь 10, 2013, 13:38 »

можно немного подправить базовый класс. Сделать дополнительные зищищённые методы, возвращающие ссылки на личные (private более естественно переводить именно так, вместо общепринятого "закрытые") переменные.
Записан

Юра.
unkeep
Гость
« Ответ #5 : Июнь 10, 2013, 13:49 »

можно немного подправить базовый класс. Сделать дополнительные зищищённые методы, возвращающие ссылки на личные (private более естественно переводить именно так, вместо общепринятого "закрытые") переменные.

наверное это самый правильное решение, но я поразмыслив решил просто добавить в  базовый класс новый функционал, с возможностью его неиспользования
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #6 : Июнь 10, 2013, 14:58 »

добавить в  базовый класс новый функционал, с возможностью его неиспользования
Какие тонкие формулировки Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Июнь 10, 2013, 15:17 »

Ну а чем плохо сделать нужные члены protected? Или вообще не морочить голову и объявить все public? Да, это единодушно осуждается, но в жизни часто непросто доказать что private (вкупе с геттерами/сеттерами) чего-то стоит. Обычно это "песики" которые наводят так, "на всякий случай" - не более того  Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Июнь 10, 2013, 15:32 »

Ну а чем плохо сделать нужные члены protected? Или вообще не морочить голову и объявить все public? Да, это единодушно осуждается, но в жизни часто непросто доказать что private (вкупе с геттерами/сеттерами) чего-то стоит. Обычно это "песики" которые наводят так, "на всякий случай" - не более того  Улыбающийся
Тем, что кто-то может так полезть куда ему не следует и испортить что-нибудь. Да и единый стиль стоит все таки соблюдать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Alexu007
Гость
« Ответ #9 : Июнь 10, 2013, 17:38 »

Тем, что кто-то может так полезть куда ему не следует и испортить что-нибудь. Да и единый стиль стоит все таки соблюдать.
Эт если скомпилированная библиотека, а если opensource - там любой может залезть куда ему не следует и сломать что захочет. Или я чего-то не то сморозил?
Записан
Bepec
Гость
« Ответ #10 : Июнь 10, 2013, 17:50 »

Сморозил наверно Улыбающийся

Даже в библиотеке с открытыми "приватными" полями чуловек руки-крюки может запихать в них невалидные значения, которые могут привести к неработоспособности Улыбающийся А сеттеры и геттеры позволяют производить проверки на валидность данных.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Июнь 10, 2013, 18:40 »

Эт если скомпилированная библиотека, а если opensource - там любой может залезть куда ему не следует и сломать что захочет.
Может, но (по-хорошему) private прозрачно намекает что можно получить по ушам если менять этот член "просто так". Изменяющий "в курсе" и открывает private только если никаких др ходов не нашлось
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #12 : Июнь 10, 2013, 21:30 »

Тем, что кто-то может так полезть куда ему не следует и испортить что-нибудь. Да и единый стиль стоит все таки соблюдать.
Эт если скомпилированная библиотека, а если opensource - там любой может залезть куда ему не следует и сломать что захочет. Или я чего-то не то сморозил?
Все можно поломать. Я имел ввиду, что по неосторожности не сломаешь ничего, если интерфейс не дает лишнего доступа.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.057 секунд. Запросов: 22.