|
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
|
|
Каковы возможности наследования или как унаследовать переменные класса?27.01.2018, 07:28. Показов 5717. Ответов 16
Если, допустим, есть класс A, который имеет переменную a, то как в классе B использовать переменную a, не прибегая к объявлению публичных переменных в модуле?
Ну или, хотя бы, свойство класса A использовать в классе B, а именно, получить значение переменной a, значение которой было присвоено в классе A.
0
|
|
| 27.01.2018, 07:28 | |
|
Ответы с готовыми решениями:
16
Как унаследовать всё содержимое класса, кроме одного метода? Каковы возможности данного языка? Каковы возможности Java в разработке игр? |
|
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
|
||||||||||||||||||||||||||
| 27.01.2018, 17:39 | ||||||||||||||||||||||||||
Сообщение было отмечено SrgKord как решение
Решение
Встречал такое категоричное утверждение, что "Полиморфизма в VBA и в VB нет вообще. Как и наследования" (@ русскоязычный форумчанин другого форума). На самом деле в VB есть наследование, но это - в msdn, а вот для VBA есть другой механизм "наследования" - с помощью оператора Implements
)класс clsA
класс clsC
1
|
||||||||||||||||||||||||||
|
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
|
||||||||||||||||
| 29.01.2018, 04:33 [ТС] | ||||||||||||||||
|
AlexSmel, да, я читал про implements, но не понял смысла в таком наследовании, когда ты наследуешь метод родительского класса, чтобы присвоить значение переменной этого же дочернего класса. Т.е. я могу это сделать и не делая имплементацию:
Main:
А вот этот метод уже как-то похож на проявление наследования:
0
|
||||||||||||||||
|
Супер-модератор
|
||
| 29.01.2018, 18:16 | ||
|
0
|
||
|
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
|
|||||||||||||||||
| 29.01.2018, 23:37 | |||||||||||||||||
|
SrgKord, я же приводил цитату. В VBA нет наследования и полиморфизма. Правда там автор так же категорично высказался и про VB, в чем, конечно, он ошибся. Предлагая оператор Implements, я не случайно взял слово "наследование" в кавычки. Конечно же класс clsParent - это никакой не "родитель", не базовый класс (в строгом смысле ООП), от которого можно было бы наследовать дочерние классы - это класс-интерфейс, определяющий "единую конструкцию", на основе которой Вы будете реализовывать частные решения.
Пример: класс-интерфейс "фигура" определяет в себе, кроме прочего, метод-функцию вычисления площади этой фигуры, а классы "прямоугольник", "круг" и "треугольник" уже реализуют в себе этот метод, но каждый по своей формуле. Если Вы через год в свою программу решите добавить класс "овал" и забудете, какие методы в нем нужно реализовать, оператор Implements "напомнит" Вам об этом, выдав ошибку компилятора и заставив вернуться к "единообразию". Далее, например, мы передаем в какую-нибудь процедуру объект (ну или ссылку на объект) класса "прямоугольник", для того чтобы процедура использовала его метод вычисления площади. Как Вы объявите эту функцию? Как-то так (примем для краткости clsA <=> "прямоугольник" clsB <=> "треугольник")
Посмотрите еще один классный пример использования интерфейсов в VBA (правда, English), там, кстати, и ответ на первую часть вопроса этого топика... Вообще, приложения Office сами по себе очень мощные программные продукты, и для людей знающих даже VBA бывает не нужен. Посмотрите какие конструкции в своих ответах выдает Казанский - закачаешся... Если же очень нужно наследование, то Вам, наверное, стоит "копать" в сторону VB.Net и далее...
0
|
|||||||||||||||||
|
Супер-модератор
|
|
| 30.01.2018, 19:24 | |
|
В VB/VBA есть и наследование и полиморфизм. Реализованные посредством наследования интерфейсов. Наследования реализации действительно нет. Но она (по большей части) не очень нужна. Довольно авторитетный Д.Эпплман в своей книге о переходе на VB.Net пишет, что даже ему наследование реализации за всю карьеру чуть ли ни разу не пригодилось.
0
|
|
|
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
|
|||
| 30.01.2018, 22:12 | |||
|
0
|
|||
|
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
|
|||
| 02.02.2018, 07:43 [ТС] | |||
|
Мне было это интересно сделать, просто для галочки, а когда оказалось, что придётся всё равно переписывать процедуры в каждом классе - решил не терять времени, оставил просто в модулях.
0
|
|||
|
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
|
|||
| 02.02.2018, 09:31 | |||
|
0
|
|||
|
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
|
|||
| 02.02.2018, 15:16 [ТС] | |||
|
0
|
|||
|
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
|
|||
| 02.02.2018, 21:54 | |||
|
Я "делю" процедуры и функции на относящиеся к определенным атрибутам и операциям, отражающим и меняющим их состояния, а затем только "властвую": пользуюсь интерфейсом не заморачиваясь, как эти процедуры работают внутри. Во "внешнем" коде я только вызываю созданный объект (ну и его методы и свойства). Из ближайшего, например, у меня есть (пока "сырой") класс мониторинга, в котором есть свойства запуска счетчика времени, его останова и вывода, при необходимости, промежуточных значений - временных меток, которые я добавляю к диагностическим сообщениям из отлаживаемой программы. Как внутри хранятся стартовое и промежуточное время, на основе какого таймера подсчитываются интервалы, мне уже по-барабану, я просто подставляю необходимые мне вызовы в критических местах кода и пользуюсь "логом" в окошке Immediate. Например, раньше мне хватало обычного счетчика Timer в реализации функции отсчета, а тут резко понадобилось поднять точность (нужно разобраться с событиями мыши в одном проектике, а нарушения последовательности вызовов и их дублирование ломают всю системку). Так вот в классе я поправил только одну процедурку: заменил Timer на API-вызов QueryPerformanceCounter, а оформление вывода диагностики и, главное - расставленные по тестируемой программке вызовы остались как были. Кроме того я могу сделать два-три независимых объекта-счетчика для контроля перекрестных вызовов от разных событий - и они будут со "своими" копиями старт-стопов. А если в главном коде будет "общая" функция, вызываемая из разных мест - какой из вызовов ее "займет" в текущий момент и что будат делать остальные вызовы - ждать ?... Что-то разговорился... Короче, не буду ни убеждать ни разубеждать, но мне нравится использование классов... ...
0
|
|||
|
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
|
|||||||||||||||||
| 04.02.2018, 06:55 [ТС] | |||||||||||||||||
|
Добавлено через 52 минуты Попытался изобразить наследование: Класс Figure
Вроде сделал всё, что надо, нет?
0
|
|||||||||||||||||
|
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
|
||||||||||||||||||||||||||||||||
| 04.02.2018, 11:38 | ||||||||||||||||||||||||||||||||
...
Я предлагаю так: Класс Figure
0
|
||||||||||||||||||||||||||||||||
|
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
|
||||||||||||||||||||||||||||||||||||||||
| 05.02.2018, 04:31 [ТС] | ||||||||||||||||||||||||||||||||||||||||
А передавать в Let значения сторон, когда смысл Let для площади явно подразумевает передачу значения площади - не правильно. ///////////// Я пересмотрел назначения свойств, и сделал так:
А вот для вычислений уже использую функции:
И вроде всё правильно, но вот такая ошибка при вызове:
Класс Figure:
0
|
||||||||||||||||||||||||||||||||||||||||
|
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
|
||||||||||||||
| 05.02.2018, 12:09 | ||||||||||||||
...Еще: Это в интерфейсе (три параметра):
Кроме того, вообще сомнительно использование ключевого слова Optional - интересно посмотреть на прямоугольник, который то имеет ширину, то не имеет, а в некоторых случаях, еще и трехмерность добавляет. Ну и при использовании ключевого слова Optional очень желательно сразу указывать "дефолтное" значение в определении, иначе VBA подставит свое (зависящее от типа, обычно 0 или "пустоту") и будет очень непонятно, почему изменились Ваши поля в объекте, хотя Вы к этому не приложили никаких усилий... И еще. Вы в определении указали передачу второго параметра по значению (Optional ByVal...), хотя в декларации там указана передача по ссылке (отсутствие ByVal эквивалентно использованию ByRef...). Вы просто очень сильно куда-то торопитесь, не надо - наслаждайтесь, ведь жизнь - такая классная штука ...
0
|
||||||||||||||
|
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
|
|
| 05.02.2018, 15:00 | |
|
ага, вложения...
0
|
|
|
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
|
|||
| 06.02.2018, 05:30 [ТС] | |||
|
Вообще, мне кажется, тут лучше применить массив или коллекцию для этого.
0
|
|||
| 06.02.2018, 05:30 | |
|
Помогаю со студенческими работами здесь
17
Каковы новые возможности mvc4 (в отличие от mvc3) Каковы реальные возможности IGBT транзисторов IR 60A 1200B? Каковы максимальные возможности Macromedia Flash 8 при создании flv-фильмов? Наследования класса как public, private и protected
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|