Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677

Каковы возможности наследования или как унаследовать переменные класса?

27.01.2018, 07:28. Показов 5717. Ответов 16

Студворк — интернет-сервис помощи студентам
Если, допустим, есть класс A, который имеет переменную a, то как в классе B использовать переменную a, не прибегая к объявлению публичных переменных в модуле?
Ну или, хотя бы, свойство класса A использовать в классе B, а именно, получить значение переменной a, значение которой было присвоено в классе A.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.01.2018, 07:28
Ответы с готовыми решениями:

Как унаследовать всё содержимое класса, кроме одного метода?
Допустим есть класс: class Race_m { public void Info_m(int count) { ...

Каковы возможности данного языка?
Скажите пожалуйста кто-нибудь можно ли на этом языке написать компьютерную игру(хоть самую простую) ?

Каковы возможности Java в разработке игр?
Добрый день! Недавно я начал изучать Java, из-за того что это очень многофункциональный, и кросплатформенный язык, который позволяет...

16
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
27.01.2018, 17:39
Лучший ответ Сообщение было отмечено SrgKord как решение

Решение

Встречал такое категоричное утверждение, что "Полиморфизма в VBA и в VB нет вообще. Как и наследования" (@ русскоязычный форумчанин другого форума). На самом деле в VB есть наследование, но это - в msdn, а вот для VBA есть другой механизм "наследования" - с помощью оператора Implements
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Option Explicit
Sub Main()
    Dim SupVal As clsParent
    Dim X_A As New clsA
    Dim X_B As New clsB
    Dim X_C As New clsC
    
    Set SupVal = X_A
    SupVal.PutVal (7)
    Set SupVal = X_B
    SupVal.PutVal (11)
    Set SupVal = X_C
    SupVal.PutVal (35)
    
    Set SupVal = X_A
    Debug.Print SupVal.GetVal
    Set SupVal = X_B
    Debug.Print SupVal.GetVal
    Set SupVal = X_C
    Debug.Print SupVal.GetVal
    X_C.PutValA X_A
    Debug.Print SupVal.GetVal
End Sub
класс clsParent, только объявления функций, без реализации...
Visual Basic
1
2
3
4
Public Function GetVal() As Integer
End Function
Public Sub PutVal(ByVal Value As Integer)
End Sub
реализация в "дочерних" классах с указанием Implements ("принадлежности" )

класс clsA
Visual Basic
1
2
3
4
5
6
7
8
9
Option Explicit
Implements clsParent
Private valA As Integer
Public Function clsParent_GetVal() As Integer
    clsParent_GetVal = valA
End Function
Public Sub clsParent_PutVal(ByVal Value As Integer)
    valA = Value
End Sub
класс clsB
Visual Basic
1
2
3
4
5
6
7
8
9
Option Explicit
Implements clsParent
Private valB As Integer
Public Function clsParent_GetVal() As Integer
    clsParent_GetVal = valB
End Function
Public Sub clsParent_PutVal(ByVal Value As Integer)
    valB = Value
End Sub
а в классе clsC, кроме "принадлежностей", есть и функция, обращающаяся к закрытому члену класса clsА, через его же открытый метод

класс clsC
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Option Explicit
Implements clsParent
Private valC As Integer
Public Function clsParent_GetVal() As Integer
    clsParent_GetVal = valC
End Function
Public Sub clsParent_PutVal(ByVal Value As Integer)
    valC = Value
End Sub
Public Sub PutValA(ByRef clsVal As clsA)
    valC = clsVal.clsParent_GetVal
End Sub
в общем, пошагово в отладчике - и все разъяснится - если поможет, конечно, ответить на вопрос...
Вложения
Тип файла: zip Test_14_poly.zip (19.4 Кб, 13 просмотров)
1
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
29.01.2018, 04:33  [ТС]
AlexSmel, да, я читал про implements, но не понял смысла в таком наследовании, когда ты наследуешь метод родительского класса, чтобы присвоить значение переменной этого же дочернего класса. Т.е. я могу это сделать и не делая имплементацию:

Main:
Visual Basic
1
2
3
    Dim SupVal as clsA
    Set SupVal = New clsA
    clsA.PutVal (7)
Класс clsA:
Visual Basic
1
2
3
4
5
Private valA As Integer
 
Public Sub PutVal(ByVal Value As Integer)
    valA = Value
End Sub
Результат тот же. В чём здесь (в примере наследования) выражается наследование, и в чём профит от объявления таких конструкций - не ясно.

А вот этот метод уже как-то похож на проявление наследования:
Visual Basic
1
2
3
Public Sub PutValA(ByRef clsVal As clsA)
    valC = clsVal.clsParent_GetVal
End Sub
Хотя это тоже скорее лишь что-то похожее на наследование, некая адаптация. Но это уже ответ на вопрос как получить значение переменной другого (не буду называть родительским) класса.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,701
Записей в блоге: 14
29.01.2018, 18:16
Цитата Сообщение от SrgKord Посмотреть сообщение
Но это уже ответ на вопрос как получить значение переменной другого (не буду называть родительским) класса.
- сама постановка противоречит принципам ООП. В частности - принципу инкапсуляции. Да и непонятно, зачем это нужно. Любопытно было бы увидеть пример. Кстати, как я понимаю, речь идет о поле (т.к. нет такого понятия - "переменная класса")
0
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
29.01.2018, 23:37
SrgKord, я же приводил цитату. В VBA нет наследования и полиморфизма. Правда там автор так же категорично высказался и про VB, в чем, конечно, он ошибся. Предлагая оператор Implements, я не случайно взял слово "наследование" в кавычки. Конечно же класс clsParent - это никакой не "родитель", не базовый класс (в строгом смысле ООП), от которого можно было бы наследовать дочерние классы - это класс-интерфейс, определяющий "единую конструкцию", на основе которой Вы будете реализовывать частные решения.

Пример: класс-интерфейс "фигура" определяет в себе, кроме прочего, метод-функцию вычисления площади этой фигуры, а классы "прямоугольник", "круг" и "треугольник" уже реализуют в себе этот метод, но каждый по своей формуле. Если Вы через год в свою программу решите добавить класс "овал" и забудете, какие методы в нем нужно реализовать, оператор Implements "напомнит" Вам об этом, выдав ошибку компилятора и заставив вернуться к "единообразию".

Далее, например, мы передаем в какую-нибудь процедуру объект (ну или ссылку на объект) класса "прямоугольник", для того чтобы процедура использовала его метод вычисления площади. Как Вы объявите эту функцию? Как-то так (примем для краткости clsA <=> "прямоугольник" clsB <=> "треугольник")
Visual Basic
1
Sub MySub(ByRef Object As clsA)
А если потом Вам нужно будет передать в эту же процедуру объект класса "треугольник"? Нельзя - несоответствие типов... Конечно, можно записать неявный As Variant
Visual Basic
1
Sub MySub(ByRef Object)
но тогда в процедуру можно будет "подсунуть" любой объект, который не имеет, например, метода "вычисления площади", но который имеют классы clsА и clsВ. Процедура снова "вылетит" с ошибкой... А вот если объявить эту процедуру
Visual Basic
1
Sub MySub(ByRef Object As сlsParent)
то процедура "примет" и clsА, и clsВ, но отвергнет все неподходящие, и метод внутри выполнится как надо... Ну чем неответ на вопрос
Цитата Сообщение от SrgKord Посмотреть сообщение
в чём профит от объявления таких конструкций

Посмотрите еще один классный пример использования интерфейсов в VBA (правда, English), там, кстати, и ответ на первую часть вопроса этого топика...

Вообще, приложения Office сами по себе очень мощные программные продукты, и для людей знающих даже VBA бывает не нужен. Посмотрите какие конструкции в своих ответах выдает Казанский - закачаешся... Если же очень нужно наследование, то Вам, наверное, стоит "копать" в сторону VB.Net и далее...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,701
Записей в блоге: 14
30.01.2018, 19:24
В VB/VBA есть и наследование и полиморфизм. Реализованные посредством наследования интерфейсов. Наследования реализации действительно нет. Но она (по большей части) не очень нужна. Довольно авторитетный Д.Эпплман в своей книге о переходе на VB.Net пишет, что даже ему наследование реализации за всю карьеру чуть ли ни разу не пригодилось.
0
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
30.01.2018, 22:12
Цитата Сообщение от AlexSmel Посмотреть сообщение
В VBA нет наследования и полиморфизма
Цитата Сообщение от Catstail Посмотреть сообщение
В VB/VBA есть и наследование и полиморфизм
Каюсь. В попытках своими словами объяснить свое же понимание терминологии человеку, по вопросам которого явно видно, какого рода наследования он ожидает (в контексте данного топика, думаю, как раз реализации), всегда есть возможность получить по шапке от более опытных товарищей за категоричность высказываний... Хорошо хоть на пальцах не объяснял, а то переломали бы...
0
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
02.02.2018, 07:43  [ТС]
Цитата Сообщение от AlexSmel Посмотреть сообщение
"копать" в сторону VB.Net и далее...
Если VB.Net можно свободно применять в модулях, редактировать и отлаживать со штатным редактором, то посмотрю. А если нет, то я уж знакомство начал с C#, и в эту сторону буду плясать дальше.

Цитата Сообщение от Catstail Посмотреть сообщение
В VB/VBA есть и наследование и полиморфизм. Реализованные посредством наследования интерфейсов. Наследования реализации действительно нет. Но она (по большей части) не очень нужна. Довольно авторитетный Д.Эпплман в своей книге о переходе на VB.Net пишет, что даже ему наследование реализации за всю карьеру чуть ли ни разу не пригодилось.
Вообще согласен, в большинстве ситуаций делать полноценный класс - лишнее. А, например, для своей надстройки выделить какую-то сущность, даже не представляю как. Просто создать класс и запихнуть в него все процедуры и функции - это как бы не то.
Мне было это интересно сделать, просто для галочки, а когда оказалось, что придётся всё равно переписывать процедуры в каждом классе - решил не терять времени, оставил просто в модулях.
0
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
02.02.2018, 09:31
Цитата Сообщение от SrgKord Посмотреть сообщение
Если VB.Net можно свободно применять ... со штатным редактором
"штатным" редактором является Visual Studio, так что продолжение знакомства с С# тоже будет обеспечено...
Цитата Сообщение от SrgKord Посмотреть сообщение
не терять времени, оставил просто в модулях
ну так и класс можно оставить просто в модулях, в своих собственных (но лучше все-таки продумывать его структуру и содержание), зато потом -> Import/Export -> и в другой проект - красота: функции известны (сам же писал), как пользоваться тоже понятно, а в основном модуле продумываешь только глобальную логику...
0
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
02.02.2018, 15:16  [ТС]
Цитата Сообщение от AlexSmel Посмотреть сообщение
ну так и класс можно оставить просто в модулях, в своих собственных (но лучше все-таки продумывать его структуру и содержание), зато потом -> Import/Export -> и в другой проект - красота: функции известны (сам же писал), как пользоваться тоже понятно, а в основном модуле продумываешь только глобальную логику...
Т.е. вы так и делаете? Просто все процедуры и функции в класс, и вперёд?

Цитата Сообщение от AlexSmel Посмотреть сообщение
"штатным" редактором является Visual Studio
Для VB.Net он штатный? Я имею в виду, что если можно VB.Net код написать в стандартный модуль, и в дальнейшем можно будет с ним работать используя VBE, то это будет удобно, т.к. VBE есть везде, где есть офис.
0
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
02.02.2018, 21:54
Цитата Сообщение от SrgKord Посмотреть сообщение
все процедуры и функции в класс, и вперёд?
“Divide et impera” ! По смыслу не подходит, но звучит красиво!
Я "делю" процедуры и функции на относящиеся к определенным атрибутам и операциям, отражающим и меняющим их состояния, а затем только "властвую": пользуюсь интерфейсом не заморачиваясь, как эти процедуры работают внутри. Во "внешнем" коде я только вызываю созданный объект (ну и его методы и свойства). Из ближайшего, например, у меня есть (пока "сырой") класс мониторинга, в котором есть свойства запуска счетчика времени, его останова и вывода, при необходимости, промежуточных значений - временных меток, которые я добавляю к диагностическим сообщениям из отлаживаемой программы. Как внутри хранятся стартовое и промежуточное время, на основе какого таймера подсчитываются интервалы, мне уже по-барабану, я просто подставляю необходимые мне вызовы в критических местах кода и пользуюсь "логом" в окошке Immediate. Например, раньше мне хватало обычного счетчика Timer в реализации функции отсчета, а тут резко понадобилось поднять точность (нужно разобраться с событиями мыши в одном проектике, а нарушения последовательности вызовов и их дублирование ломают всю системку). Так вот в классе я поправил только одну процедурку: заменил Timer на API-вызов QueryPerformanceCounter, а оформление вывода диагностики и, главное - расставленные по тестируемой программке вызовы остались как были. Кроме того я могу сделать два-три независимых объекта-счетчика для контроля перекрестных вызовов от разных событий - и они будут со "своими" копиями старт-стопов. А если в главном коде будет "общая" функция, вызываемая из разных мест - какой из вызовов ее "займет" в текущий момент и что будат делать остальные вызовы - ждать ?... Что-то разговорился... Короче, не буду ни убеждать ни разубеждать, но мне нравится использование классов...
Цитата Сообщение от SrgKord Посмотреть сообщение
VB.Net код написать в стандартный модуль, и в дальнейшем можно будет с ним работать используя VBE
...увы ...
0
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
04.02.2018, 06:55  [ТС]
Цитата Сообщение от AlexSmel Посмотреть сообщение
А если в главном коде будет "общая" функция, вызываемая из разных мест - какой из вызовов ее "займет"
Понимаю. Создание экземпляра класса эту проблему решит. Мне пока не доводилось столкнуться с параллельным выполнением процедур. Вообще-то я в недоумении сейчас, как это у вас две процедуры одновременно работают. Вы с VBA работаете или с VB.Net?

Добавлено через 52 минуты
Попытался изобразить наследование:
Класс Figure
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Option Explicit
 
Public Property Get Square() As Double
 
End Property
 
Public Property Let Square(ByVal d As Double)
 
End Property
 
Public Property Let Param(ByVal x As Double)
 
End Property
Класс Rectangle

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Option Explicit
Implements Figure
 
Dim r As Double
Const pi As Double = 3.1415
 
Public Property Get Figure_Square() As Double
    Square_Square = (r^(2)) * pi
End Property
 
Public Property Let Figure_Param(ByVal d As Double)
    r = d
End Property
И вызвать:
Visual Basic
1
2
3
4
5
6
Sub test()
Dim C As Figure
    Set C = New Rectangle
    C.Param = 5
    Debug.Print C.Square
End Sub
Но тут встречаю ошибку, что я должен включить "Square" для интерфейса "Figure".
Вроде сделал всё, что надо, нет?
0
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
04.02.2018, 11:38
Цитата Сообщение от SrgKord Посмотреть сообщение
Класс Rectangle
Visual Basic
1
2
3
Public Property Get Figure_Square() As Double
  Square_Square = (r^(2)) * pi
End Property
нужно поправить (иначе, впоследствии, после исправления текущей ошибки, была еще одна ошибка)...
Visual Basic
1
2
3
Public Property Get Figure_Square() As Double
   Figure_Square = (r^(2)) * pi ' возврат функции должен быть именем функции...
End Property
или даже ...
Visual Basic
1
2
3
Public Property Get Figure_Square() As Double
   Figure_Square = r^2 * pi ' а 2 в скобках - зачем, да и приоритет операций никто не отменял...
End Property
Кроме того, Вы забыли реализовать Let (это и есть источник текущей ошибки)...
Visual Basic
1
2
3
Public Property Let Figure_Square(ByVal d As Double)
    r = d/2 ' ... или d - это не диаметр, а радиус ? ...
End Property
...и, глядя на это, возникает вопрос, а зачем тогда Param(ByVal d As Double)...

Я предлагаю так:
Класс Figure
Visual Basic
1
2
3
4
5
Option Explicit
Public Property Get Square() As Double
End Property
Public Property Let Square(ByVal d As Double)
End Property
Класс Rectangle
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Option Explicit
Implements Figure
Dim r As Double
Const pi As Double = 3.1415
 
Public Property Get Figure_Square() As Double
    Figure_Square = r^2 * pi
End Property
Public Property Let Figure_Square(ByVal d As Double)
    r = d/2 
End Property
И вызвать:
Visual Basic
1
2
3
4
5
6
Sub test()
Dim C As Figure
    Set C = New Rectangle
    C.Square = 5
    Debug.Print C.Square
End Sub
Добавлено через 32 минуты

Не по теме:

Цитата Сообщение от SrgKord Посмотреть сообщение
Класс Rectangle
Цитата Сообщение от SrgKord Посмотреть сообщение
Square = (r^(2)) * pi
Вот, блин, Вы меня развели :)...

0
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
05.02.2018, 04:31  [ТС]
Цитата Сообщение от AlexSmel Посмотреть сообщение
возврат функции должен быть именем функции..
Это я имена функций менял, а вот про результат забыл

Цитата Сообщение от AlexSmel Посмотреть сообщение
а 2 в скобках - зачем, да и приоритет операций никто не отменял...
Я так и писал изначально, но не понимал редактор запись, красным выделял, вот я в скобки и запихнул

Цитата Сообщение от AlexSmel Посмотреть сообщение
или d - это не диаметр, а радиус ? ...
d - просто какая-нибудь буква, чтобы было свойство

Цитата Сообщение от AlexSmel Посмотреть сообщение
Кроме того, Вы забыли реализовать Let (это и есть источник текущей ошибки)...
Не, у меня оно было, просто присваивало значение переменной r:

Visual Basic
1
2
3
Public Property Let Figure_Param(ByVal d As Double)
    r = d
End Property
Кстати, только сейчас заметил, что перепутал, и площадь круга в квадрат запихнул

Цитата Сообщение от AlexSmel Посмотреть сообщение
...и, глядя на это, возникает вопрос, а зачем тогда Param(ByVal d As Double)...
Я просто не предполагал в примере задавать площадь, только получать её. А парам сделал для задания значения переменной.

Цитата Сообщение от AlexSmel Посмотреть сообщение
Вот, блин, Вы меня развели ...
Да, да, я об этом и говорил ^_^ я хотел два класса описать, чтобы было наглядно, но успел только один

Цитата Сообщение от AlexSmel Посмотреть сообщение
Figure_Square = r^2 * pi
Нет, редактор упорно требует двойку в скобки заключить

Цитата Сообщение от AlexSmel Посмотреть сообщение
Я предлагаю так:
В такой схеме мне не нравится то, что если вывести значение площади, опираясь на значения переменных, т.е. вычислить площадь в свойстве, то переменная, хранящая текущее значение площади, будет игнорироваться, и, если сперва задать значение площади через Let, то затем свойство Get не вернёт новое значение площади.
А передавать в Let значения сторон, когда смысл Let для площади явно подразумевает передачу значения площади - не правильно.

/////////////

Я пересмотрел назначения свойств, и сделал так:
Visual Basic
1
2
3
Public Property Get Figure_Square() As Double
    Figure_Square = square
End Property
Вводя Square после точки, я ожидаю получить текущее значение площади, т.е. здесь надо просто вернуть переменную square

Visual Basic
1
2
3
Public Property Let Figure_Square(ByVal sq As Double)
    square = sq
End Property
Здесь, наоборот, приравнивая Square к числу, я расчитываю на то, что текущее значение площади изменится на указанное мной.

А вот для вычислений уже использую функции:
Visual Basic
1
2
3
4
5
Public Function Figure_GetSquare(ByVal a As Double, ByVal b As Double) As Double
    sideA = a: sideB = b
    square = sideA * sideB
    Figure_GetSquare = square
End Function
Здесь я и задаю новые значения длин сторон, и обновляю текущее значение площади.

И вроде всё правильно, но вот такая ошибка при вызове:
Procedure declaration does not match description of event or procedure having the same name
MSDN говорит, что это потому, что у меня, мол, имя функции совпадает с именем свойства, что явно не так.

Класс Figure:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Option Explicit
 
Public Property Get square() As Double
 
End Property
 
Public Property Let square(ByVal d As Double)
 
End Property
 
Public Function GetSquare(ByVal x As Double, Optional y As Double, Optional z As Double) As Double
 
End Function
Класс Rectangle:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Option Explicit
Implements Figure
 
Dim sideA As Double
Dim sideB As Double
Dim square As Double
 
Public Property Get Figure_Square() As Double
    Figure_Square = square
End Property
 
Public Property Let Figure_Square(ByVal sq As Double)
    square = sq
End Property
 
Public Function Figure_GetSquare(ByVal a As Double, Optional ByVal b As Double) As Double
    sideA = a: sideB = b
    square = sideA * sideB
    Figure_GetSquare = square
End Function
Что здесь не так?
0
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
05.02.2018, 12:09
Цитата Сообщение от SrgKord Посмотреть сообщение
но не понимал редактор запись
у меня, к сожалению, есть возможность проверки только на двух версиях: Excel2007 и Excel2013. В обоих - поведение редактора идентичное - Screen.zip...
Цитата Сообщение от SrgKord Посмотреть сообщение
В такой схеме мне не нравится
Под словами "Я предлагаю так:" я только исправил ошибки компиляции. Физический смысл имен переменных - Ваша забота ...
Цитата Сообщение от SrgKord Посмотреть сообщение
И вроде всё правильно, но ... MSDN говорит, что ... имя функции совпадает с именем свойства, что явно не так.
В VBA прописные и строчные буквы не различаются, но введенные прописные буквы сохраняются. Имена переменных VBA.gif - иллюстрация при наборе кода...

Еще:
Это в интерфейсе (три параметра):
Visual Basic
1
Public Function GetSquare(ByVal x As Double, Optional y As Double, Optional z As Double) As Double
Это в реализации (два параметра):
Visual Basic
1
Public Function Figure_GetSquare(ByVal a As Double, Optional ByVal b As Double) As Double
Вас еще удивляет Procedure declaration does not match description of event... Наличие Optional не избавляет от необходимости соответствия определения объявлению. Это потом, при вызове можете опустить опциональные параметры...

Кроме того, вообще сомнительно использование ключевого слова Optional - интересно посмотреть на прямоугольник, который то имеет ширину, то не имеет, а в некоторых случаях, еще и трехмерность добавляет. Ну и при использовании ключевого слова Optional очень желательно сразу указывать "дефолтное" значение в определении, иначе VBA подставит свое (зависящее от типа, обычно 0 или "пустоту") и будет очень непонятно, почему изменились Ваши поля в объекте, хотя Вы к этому не приложили никаких усилий... И еще. Вы в определении указали передачу второго параметра по значению (Optional ByVal...), хотя в декларации там указана передача по ссылке (отсутствие ByVal эквивалентно использованию ByRef...).

Вы просто очень сильно куда-то торопитесь, не надо - наслаждайтесь, ведь жизнь - такая классная штука ...
0
35 / 32 / 15
Регистрация: 23.12.2014
Сообщений: 97
05.02.2018, 15:00
ага, вложения...
Миниатюры
Каковы возможности наследования или как унаследовать переменные класса?  
Вложения
Тип файла: zip Screen.zip (118.2 Кб, 5 просмотров)
0
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
06.02.2018, 05:30  [ТС]
Цитата Сообщение от AlexSmel Посмотреть сообщение
Вы просто очень сильно куда-то торопитесь, не надо - наслаждайтесь, ведь жизнь - такая классная штука
У меня в день есть только два - три часа до начала рабочего дня, чтобы сделать всё, что мне надо. Потом уже будет не расслабиться. Поэтому я тороплюсь. Утренние часы свободного времени пролетают незаметно.

Цитата Сообщение от AlexSmel Посмотреть сообщение
интересно посмотреть на прямоугольник, который то имеет ширину, то не имеет, а в некоторых случаях, еще и трехмерность добавляет.
Это ж я хочу сделать квадрат, круг и треугольник, наследуя свойство Square от базового класса. Поэтому там припасено три переменные, для треугольника - две стороны и угол.
Вообще, мне кажется, тут лучше применить массив или коллекцию для этого.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.02.2018, 05:30
Помогаю со студенческими работами здесь

Каковы новые возможности mvc4 (в отличие от mvc3)
Добрый день! Подскажите пожалуйста какие нововведения появились в mvc4?

Каковы реальные возможности IGBT транзисторов IR 60A 1200B?
Добрый день! На основании личного опыта,дайте,пожалуйста,оценку соответствия заявленным характеристикам по току и рассеиваемой мощности...

Каковы максимальные возможности Macromedia Flash 8 при создании flv-фильмов?
Я сделал трехмерную анимацию в Мах и импортировал готовые кадры, размером 640х480 пикселей, в формате jpg в программу Macromedia Flash 8. У...

Наследования класса как public, private и protected
Ну допустим у нас есть класс который наследуется как public: class Cylinder : public Point { // ...здесь код } Класс...

Переменные на уровне класса или метода?
Есть класс в котором крутятся порядка 30-40 переменных. Сам класс небольшой, но в нём рассчитываются куча параметров. Есть как и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
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(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru