Заблокирован
|
|||||||||||
1 | |||||||||||
Неопределенность в абстракции02.07.2016, 12:03. Показов 1413. Ответов 22
Метки нет (Все метки)
Добрый день.
Есть класс A от которого производится класс В и С. У этих классов есть общий метод f1(). у класса B не должно быть метода f3(), а у С метода f2() что-бы работал полиморфизм мне пришлось определить методы f2() и f3() в классе А. чистыми их делать не могу, так как у класса B не должно быть метода f3(), а у С метода f2(). чистый тут только f1() вся опасность в этом
В общем как это устранить при вышеизложенных требований.
0
|
02.07.2016, 12:03 | |
Ответы с готовыми решениями:
22
Абстракции Абстракция, уровни абстракции Задачка с использованием абстракции Изучение инкапсуляции и абстракции |
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
|
|
02.07.2016, 12:36 | 2 |
Вы сами себе придумали ошибку
0
|
Заблокирован
|
||||||
02.07.2016, 12:42 [ТС] | 3 | |||||
ага щас. теперь вообще не фурычет. и ясен пень почему
prog.cpp: In function 'int main()': prog.cpp:29:8: error: 'class A' has no member named 'f2' b->f2(); ^ prog.cpp:33:8: error: 'class A' has no member named 'f3' c->f3(); удалять не катит.
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
02.07.2016, 14:37 | 4 |
Ну, если этих функций не должно быть, но они могут вызываться, то что здесь можно придумать кроме исключений?
0
|
Заблокирован
|
||||||
02.07.2016, 14:45 [ТС] | 5 | |||||
да думал я в эти тела запихнуть исключения - но не сильно мне нравится этот подход.
еще можно тупо написать так
а мне это не надо. только то что действительно относится к этому классу. у класса B не должно быть метода f3(), а у С метода f2() может вести какой-то дополнительный класс ?
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
02.07.2016, 14:51 | 6 |
RAFA91, вы наследование как-то задом наперед используете. Может проще вверху разделить эту функциональность, чем внизу ограничивать?
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
02.07.2016, 14:56 | 8 |
Ну, общая часть у классов B и C - это функция f1, зачем пихать в базовый класс что-то еще?
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
02.07.2016, 15:03 | 10 |
Ну, если вы перенесете функции f2 и f3 из базового в потомки - оно не перестанет работать.
0
|
0 / 0 / 0
Регистрация: 02.07.2016
Сообщений: 5
|
||||||
02.07.2016, 16:05 | 12 | |||||
0
|
0 / 0 / 0
Регистрация: 02.07.2016
Сообщений: 5
|
|
02.07.2016, 16:55 | 14 |
удаленный метод, в гугле default and delete
напишите delete после метода в классе производном от базового и тем самым запретите вызов и использование метода
0
|
0 / 0 / 0
Регистрация: 02.07.2016
Сообщений: 5
|
|
02.07.2016, 17:01 | 16 |
удалить виртуальный метод невозможно, а простой можно
"У этих классов есть общий метод f1(). " - не сказано что он должен быть виртуальным
0
|
0 / 0 / 0
Регистрация: 02.07.2016
Сообщений: 5
|
|
02.07.2016, 17:10 | 18 |
0
|
0 / 0 / 0
Регистрация: 02.07.2016
Сообщений: 5
|
|
02.07.2016, 17:27 | 20 |
можно попробовать через sealed и пару вспомогательных классов
0
|
02.07.2016, 17:27 | |
02.07.2016, 17:27 | |
Помогаю со студенческими работами здесь
20
Entity Framework и абстракции Написать код программы (Абстракции) Права доступа, уровень абстракции Доработать программу(выделение уровней абстракции и т.д.) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |