|
|
||||||
Перегрузка метода родительского класса30.05.2021, 08:23. Показов 11090. Ответов 71
Метки нет (Все метки)
turn_on то проблема решена. или если через область видимости (или как там по научному это называется) Device:turn_onно как без всего этого сделать перезагрузку методов ?
0
|
||||||
| 30.05.2021, 08:23 | |
|
Ответы с готовыми решениями:
71
Вызов метода родительского класса
Передача метода класса в качестве параметра для метода другого класса |
|
|
||||||||
| 07.06.2021, 11:19 [ТС] | ||||||||
|
...секунду подумаю
Добавлено через 3 часа 42 минуты override ? если надо из родител увидеть потомка есть virtual если сразу потомка то делаем объект потомка. + область видимости еще нам в помощь :: и т.д. зачем override при том что это не перегруз а переопределение как virtualДобавлено через 5 минут например
вы говорили using инкапсулирует всё в наследника. я указал что B::write(char) virtual... в надежде что using определит эту виртуальную функцию в потомке... но чтото не выходит
0
|
||||||||
|
фрилансер
6501 / 5732 / 1134
Регистрация: 11.10.2019
Сообщений: 15,350
|
||||||||
| 07.06.2021, 11:42 | ||||||||
X и обязательно захотелось, чтобы метод F в нём был виртуальный, причём уже в предке A.Без указания override не будет такой гарантии (компилятор просто тихо создаст метод в X и всё).А вот если указать
B объявлена чистая виртуальная функция virtual void write(unsigned char) = 0; , а в C она не реализована. Поэтому не удаётся создать экземпляр класса Cusing не объявляет виртуальные функции
0
|
||||||||
|
|
||
| 07.06.2021, 13:58 [ТС] | ||
![]() нет , понятно что так неправильно, иначе небылобы этого вопроса... вопрос как из одного родителя всётаки увидеть метод другого родителя ?
0
|
||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|||||||||||||
| 07.06.2021, 14:30 | |||||||||||||
Добавлено через 5 минут
1
|
|||||||||||||
|
|
|
| 07.06.2021, 16:02 [ТС] | |
|
TRam_, спасибо за часть с коментариями .. хм...
из всего этого получается (если не прав поправьте) мы не можем говорить что все методы родителя как бы "копируются" в потомка. иначе не былоб ошибки в моём последнем примере. получается они там и остаются на более низком уровне предка... а просто компилятор если не нашёл метода в потомке спускается на этаж вниз и там ищет и так до подвала. причем без перегрузки методов между этажами. правильно?
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|||
| 07.06.2021, 16:44 | |||
|
Несколько иное поведение в случае виртуального наследования, но это отдельная тема. Добавлено через 5 минут
0
|
|||
|
|
||||||
| 14.06.2021, 14:38 [ТС] | ||||||
|
TRam_, подскажите плиз как исправить этот варнинг
warning: inline function ‘virtual void LLPrint::write(unsigned char)’ used but never defined
0
|
||||||
|
фрилансер
6501 / 5732 / 1134
Регистрация: 11.10.2019
Сообщений: 15,350
|
||||||
| 14.06.2021, 14:48 | ||||||
|
alexbmd, убери
inline у виртуальных функцийда и воообще у всех функций убери Добавлено через 57 секунд а переопределяемые виртуальные нужно помечать override
0
|
||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,829
|
|
| 14.06.2021, 16:32 | |
|
alexbmd,
1) inline-функции нужно определение. В случае LLPrint::write определения нет. Об этом вас и предупреждают. Это не ошибка, но очень странный код, на который стоило обратить внимание.2) inline и virtual вполне сочетаются, но, зачастую, лишь в одном аспекте - правил ODR применяемых к определениям таких функций, что на практике выражается в возможности размещения их в заголовочном файле. Аспект встраивания почти никогда не применяется, потому что в обычной ситуации вызов виртуальной функции выполняется через VTBL, т.е. через указатель, что исключает встраивание по естественным причинам.
2
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 14.06.2021, 23:16 | ||
0
|
||
|
|
||||||
| 15.06.2021, 09:31 [ТС] | ||||||
|
TRam_, для совместимости похоже
потому что есть например такая функция
а подскажите плиз, структура виртуальной может быть ? вот если у нас например в классе B есть структура. класс B дочерний от A (схема линковки выше как C>B>A). если мы в А ссылаемся (если теоретически возможно) на структуру (как тип данных) из класса B мы можем это как то сделать ? просто объявляем структуру виртуальной ? virtual struct Data_t; ?
0
|
||||||
|
фрилансер
6501 / 5732 / 1134
Регистрация: 11.10.2019
Сообщений: 15,350
|
|
| 15.06.2021, 09:34 | |
|
alexbmd, виртуальными могут быть только функции-члены
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|||
| 15.06.2021, 17:41 | |||
|
0
|
|||
|
фрилансер
6501 / 5732 / 1134
Регистрация: 11.10.2019
Сообщений: 15,350
|
||
| 16.06.2021, 12:02 | ||
|
1
|
||
|
|
|
| 17.06.2021, 19:29 [ТС] | |
|
помогите пожалуйста разобраться с перезагрузкой операторов
https://www.cplusplus.com/doc/tutorial/templates/ 1) стр 10. тип (type) это тип возвращаемого объекта функции перезагрузки оператор + ? 2) ну аргумент/параметр тут понятно . но... как действует оператор перезагрузки, в данном случае +. я имею ввиду в стр 24 он (оператор) работает над двумя объектами . а для функции этого оператора на входе только один объект ??? 3) в стр 14 мы создаем временный объект , который самоудалиться после ретурна (при выходе из функции оператора)... но не понятно вот что. при создании объекта вызывается и конструктор для него. в даном примере конструктор не инициализирует переменные значит они null. в 15/16 строчке мы в null приплюсуем объект param ... скажем на входе был Bar(1,2)... temp.x = null +1 // равно 1. то есть что было то и осталось. и потом это всё возвращяем в Bar... получается Bar остался с такими же значениями... вот как это всё работает ?
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,829
|
|||||||||||||
| 17.06.2021, 21:13 | |||||||||||||
|
Т.е. a + b - это a.operator+(b), где b - это явный параметр, a - это this.Добавлено через 4 минуты 1) Конструктор и правда ничего не инициализирует, но никаких `null` там нет. Там мусор. 2) в temp.x присваивается значение х текущего объекта плюс значение х из параметра, никаких `null` + 1 нет даже близко!Добавлено через 4 минуты Вот этот код
1
|
|||||||||||||
|
|
||||||
| 17.06.2021, 21:18 [ТС] | ||||||
|
DrOffset,
хорошо это только два объекта и получается a.operator+(b) а если там a + b + c то что получается ?и второй вопрос, мучаюсь и не пойму как перезагрузить << чтобы увидеть печать ?
0
|
||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,829
|
||||||||
| 17.06.2021, 21:26 | ||||||||
a.operator+(b).operator+(c)
1
|
||||||||
| 17.06.2021, 21:26 | |
|
Как вызвать виртуальную функцию из дочернего класса, если она определена и вызывается в конструкторе РОДИТЕЛЬСКОГО класса? Вызов метода класса из метода другого класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml,
в чате форсили функторы модулей как суперфичу.
Пытаясь отдуплить концепт, наткнулся на тутор с простым примером.
А главный принцип обучения от. . .
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|