С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
641 / 218 / 14
Регистрация: 21.01.2023
Сообщений: 309
1

Доступ к полям класса пользовательских типов

09.08.2024, 13:36. Показов 732. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Предыстория.
Есть у меня игровой проект, шутер FPS, в нём изначально был один персонаж. Все его параметры и физика собраны в отдельном модуле (не классе). Решил переделать на мультиплеер (пока с ботами), соответственно модуль переделал на класс. И вот тут начинаются проблемы.
Некоторые Public поля пользовательских типов (структуры), класс такое не позволяет. Вроде бы, решение простое - делаем поля Private и оборачиваем его в Property. Public Property таких типов тоже недопустимы, но тут спасает ключевое слово Friend.
Но! Многие функции и процедуры математики реализованы так, что возвращают значение через ByRef параметр, а не как возврат в функции, но такой возврат перестаёт работать, когда к структуре мы получаем доступ через Property.
Пример. Процедура vAdd суммирует вектора vIn1 и vIn2 и возвращает значение в vOut:

Visual Basic
1
2
3
4
Private Sub vAdd(vOut As Vector, vIn1 As Vector, vIn2 As Vector)
  vOut.x = vIn1.x + vIn2.x
  vOut.y = vIn1.y + vIn2.y
End Sub
Так работает (V0, V1, V2 - вектора):
Visual Basic
1
vAdd V0, V1, V2
А так не работает (T.V - вектор, находящийся в экземпляре класса):
Visual Basic
1
vAdd T.V, V1, V2
Я понимаю, что можно решить так:
Visual Basic
1
2
vAdd V0, V1, V2
T.V = V0
Но хочется красивого решения. Мысли будут?

Прилагаю минимальный тестовый проект.
Вложения
Тип файла: zip ClassStruct.zip (1.6 Кб, 4 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.08.2024, 13:36
Ответы с готовыми решениями:

Доступ к полям класса через переменные другого класса
Уважаемые коллеги! Почему в моделях Аnylogic для упрощения доступа к полям одного класса (класс А)...

Как получить доступ к полям класса, который в свою очередь является полем шаблонного класса?
В данном случае параметром шаблона функции является класс матрица, в arr находится сама матрица....

Доступ к полям класса
Здравствуйте. Есть некий "интерфейс" Interface.h class Interface { protected: string...

Доступ к полям класса
Имеет список list с объектами класса zapis list<zapis> list как мне получить значение поля...

20
641 / 218 / 14
Регистрация: 21.01.2023
Сообщений: 309
12.08.2024, 03:26  [ТС] 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от testuser2 Посмотреть сообщение
Еще можно делать "трамплин", с помощью него можно подменять задекларированную (библиотечную) функцию на свою, и т.о. использовать в ней тип передачи аргумента ByVal/ByRef, As Any.
Да, есть у меня этот пример.
Цитата Сообщение от testuser2 Посмотреть сообщение
просто удивляет, что такое можно создавать на VB
Так это же не принципиально, на VB, или на чём-то другом.
0
12.08.2024, 03:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2024, 03:26
Помогаю со студенческими работами здесь

Доступ к полям внешнего класса
Доброй ночи! Проблема в следующем, есть классы А и Б: class A{ private B } class B{ public...

Доступ к полям родительского класса
Возможно, очень нубский вопрос, но у меня есть класс А и наследуемый от него класс В public...

Доступ к полям у класса-наследника
есть следующая иерархия классов: abstract class A { bool flag; } class B:A { }

Доступ к private полям класса
Есть класс Student и список list который заполняется экземплярами класса. Потом этот список...

Доступ к приватным полям класса
вот класс: #ifndef STUDENT_H_INCLUDED #define STUDENT_H_INCLUDED #include "iostream" #include...

Получить доступ к private полям из inner класса
В документации и книгах написано что можно получить доступ к полям внешнего класса из inner класса...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru