Russian Qt Forum
Ноябрь 26, 2024, 06:45
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
[РЕШЕНО] Переопределения метода, использующего приватные переменные
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [РЕШЕНО] Переопределения метода, использующего приватные переменные (Прочитано 5881 раз)
unkeep
Гость
[РЕШЕНО] Переопределения метода, использующего приватные переменные
«
:
Июнь 10, 2013, 13:19 »
Есть базовый класс, в котором метод что-то делает используя при этом закрытые переменные класса. Я наследуюсь от базового класса и пытаюсь переопределить этот метод, но доступ к переменным я получить не могу.
Поможет ли если в базовом классе сделать переменные не private a protected?
Есть ли другие способы изменить реализацию метода не влезая в базовый класс?
«
Последнее редактирование: Июнь 10, 2013, 13:49 от unkeep
»
Записан
Bepec
Гость
Re: Переопределения метода, использующего приватные переменные
«
Ответ #1 :
Июнь 10, 2013, 13:22 »
Кхм. Могу врать, но если вы наследуетесь, то у вас уже есть доступ к приватным полям класса вроде.
А метод виртуальный?
Записан
unkeep
Гость
Re: Переопределения метода, использующего п
«
Ответ #2 :
Июнь 10, 2013, 13:25 »
Цитата: Bepec от Июнь 10, 2013, 13:22
Кхм. Могу врать, но если вы наследуетесь, то у вас уже есть доступ к приватным полям класса вроде.
А метод виртуальный?
метод вируальный. а при наследовании приватные(private) переменные видны но не доступны.
я могу вносить незначительные изменения в базовый класс, но он уже вовсю используется. поэтому хотелось бы не менять а расширить
пока у меня есть три варианта:
1)унаследоваться и пререопределить нужные методы (самый правильный, но, боюсь, невозможный)
2)внести изменения в базовый класс. (не желательно)
3) создать новый класс, скопировав код из базового и в новом уже реализовать так как надо (как-то не рационально)
«
Последнее редактирование: Июнь 10, 2013, 13:32 от unkeep
»
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Переопределения метода, использующего приватные переменные
«
Ответ #3 :
Июнь 10, 2013, 13:35 »
А нужен интерфейс базового класса? Можно же через агрегацию. Вообще, нужно больше конкретики, чтобы найти лучшее решение.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Переопределения метода, использующего приватные переменные
«
Ответ #4 :
Июнь 10, 2013, 13:38 »
можно немного подправить базовый класс. Сделать дополнительные зищищённые методы, возвращающие ссылки на личные (private более естественно переводить именно так, вместо общепринятого "закрытые") переменные.
Записан
Юра.
unkeep
Гость
Re: Переопределения метода, использующего приватные переменные
«
Ответ #5 :
Июнь 10, 2013, 13:49 »
Цитата: lit-uriy от Июнь 10, 2013, 13:38
можно немного подправить базовый класс. Сделать дополнительные зищищённые методы, возвращающие ссылки на личные (private более естественно переводить именно так, вместо общепринятого "закрытые") переменные.
наверное это самый правильное решение, но я поразмыслив решил просто добавить в базовый класс новый функционал, с возможностью его неиспользования
Записан
xokc
Птица говорун
Offline
Сообщений: 976
Re: Переопределения метода, использующего приватные переменные
«
Ответ #6 :
Июнь 10, 2013, 14:58 »
Цитата: unkeep от Июнь 10, 2013, 13:49
добавить в базовый класс новый функционал, с возможностью его неиспользования
Какие тонкие формулировки
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: [РЕШЕНО] Переопределения метода, использующего приватные переменные
«
Ответ #7 :
Июнь 10, 2013, 15:17 »
Ну а чем плохо сделать нужные члены protected? Или вообще не морочить голову и объявить все public? Да, это единодушно осуждается, но в жизни часто непросто доказать что private (вкупе с геттерами/сеттерами) чего-то стоит. Обычно это "песики" которые наводят так, "на всякий случай" - не более того
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: [РЕШЕНО] Переопределения метода, использующего приватные переменные
«
Ответ #8 :
Июнь 10, 2013, 15:32 »
Цитата: Igors от Июнь 10, 2013, 15:17
Ну а чем плохо сделать нужные члены protected? Или вообще не морочить голову и объявить все public? Да, это единодушно осуждается, но в жизни часто непросто доказать что private (вкупе с геттерами/сеттерами) чего-то стоит. Обычно это "песики" которые наводят так, "на всякий случай" - не более того
Тем, что кто-то может так полезть куда ему не следует и испортить что-нибудь. Да и единый стиль стоит все таки соблюдать.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Alexu007
Гость
Re: [РЕШЕНО] Переопределения метода, использующего приватные переменные
«
Ответ #9 :
Июнь 10, 2013, 17:38 »
Цитата: Пантер от Июнь 10, 2013, 15:32
Тем, что кто-то может так полезть куда ему не следует и испортить что-нибудь. Да и единый стиль стоит все таки соблюдать.
Эт если скомпилированная библиотека, а если opensource - там любой может залезть куда ему не следует и сломать что захочет. Или я чего-то не то сморозил?
Записан
Bepec
Гость
Re: [РЕШЕНО] Переопределения метода, использующего приватные переменные
«
Ответ #10 :
Июнь 10, 2013, 17:50 »
Сморозил наверно
Даже в библиотеке с открытыми "приватными" полями чуловек руки-крюки может запихать в них невалидные значения, которые могут привести к неработоспособности
А сеттеры и геттеры позволяют производить проверки на валидность данных.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: [РЕШЕНО] Переопределения метода, использующего приватные переменные
«
Ответ #11 :
Июнь 10, 2013, 18:40 »
Цитата: Alexu007 от Июнь 10, 2013, 17:38
Эт если скомпилированная библиотека, а если opensource - там любой может залезть куда ему не следует и сломать что захочет.
Может, но (по-хорошему) private прозрачно намекает что можно получить по ушам если менять этот член "просто так". Изменяющий "в курсе" и открывает private только если никаких др ходов не нашлось
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: [РЕШЕНО] Переопределения метода, использующего приватные переменные
«
Ответ #12 :
Июнь 10, 2013, 21:30 »
Цитата: Alexu007 от Июнь 10, 2013, 17:38
Цитата: Пантер от Июнь 10, 2013, 15:32
Тем, что кто-то может так полезть куда ему не следует и испортить что-нибудь. Да и единый стиль стоит все таки соблюдать.
Эт если скомпилированная библиотека, а если opensource - там любой может залезть куда ему не следует и сломать что захочет. Или я чего-то не то сморозил?
Все можно поломать. Я имел ввиду, что по неосторожности не сломаешь ничего, если интерфейс не дает лишнего доступа.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...