С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 25.03.2022
Сообщений: 36
1
Delphi 6-7

Массив как private поле класса

24.10.2022, 13:27. Показов 395. Ответов 6

Author24 — интернет-сервис помощи студентам
Здравствуйте. Нужно написать класс матриц, и как я понимаю у меня там должно быть указаны двумерный массив и размеры матрицы как поля. Нужно сделать методы ля работы с этими матрицами. Только вот вопрос. Мне нужно, чтобы все поля были private. Как я могу получить доступ через геттер и сеттер к массиву? При попытке создать функцию геттера выдает ошибку с "тип ожидался а 'array" получено".
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.10.2022, 13:27
Ответы с готовыми решениями:

Динамический массив как поле класса. Это возможно?
Помогите разобраться , в чем дело? Есть тип TFilterRec . есть еще класс, который содержит поле...

Как получить доступ к Private методам класса, используя директивы условий?
Всем привет! Можна ли получить доступ к закрытым методам класса, используя директивы условной...

Можно ли в поле private сконструировать объект с параметрами другого класса?
Например у меня есть классы Basic и Second. Во 2-м классе есть конструктор с параметрами. Можно ли...

Массив объектов одного класса как поле другого класса
Доброе время суток. Мне тут в универе задали лабу, нужно создать класс полем которого будет массив...

6
Модератор
3758 / 2262 / 783
Регистрация: 15.11.2015
Сообщений: 8,997
24.10.2022, 14:40 2
Sakaido, например, так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
  TMyMatrix = class
  private
    FMatrix: array of array of integer;
    procedure SetMatrixValue(i, j, Value: integer);
    function GetMatrixValue(i, j: integer): integer;
  public
    property MatrixValue[i, j: integer]: integer read GetMatrixValue write SetMatrixValue;
    procedure SetSize(m, n: integer);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
{ TMyMatrix }
 
function TMyMatrix.GetMatrixValue(i, j: integer): integer;
begin
  if (i >= Low(FMatrix)) and (i <= High(FMatrix)) and
     (j >= Low(FMatrix[Low(FMatrix)])) and (j <= High(FMatrix[Low(FMatrix)])) then
    Result := FMatrix[i, j]
  else
    Result := 0;
end;
 
procedure TMyMatrix.SetMatrixValue(i, j, Value: integer);
begin
  if (i >= Low(FMatrix)) and (i <= High(FMatrix)) and
     (j >= Low(FMatrix[Low(FMatrix)])) and (j <= High(FMatrix[Low(FMatrix)])) then
    FMatrix[i, j] := Value;
end;
 
procedure TMyMatrix.SetSize(m, n: integer);
begin
  if (m >0) and (n > 0) then
    SetLength(FMatrix, m, n);
end;
 
// И использование
procedure TForm1.Button1Click(Sender: TObject);
var
  m: TMyMatrix;
begin
  m := TMyMatrix.Create;
  m.SetSize(2, 2);
  m.MatrixValue[1, 0] := 244;
  m.MatrixValue[1, 1] := 123;
  Label1.Caption := IntToStr(m.MatrixValue[1, 0]);
 
  FreeAndNil(m);
end;
Добавлено через 1 минуту
Если хотите, можете добавить выкидывание исключений в случае выхода за пределы массива и т.д.
0
AxBxC=X
155 / 135 / 58
Регистрация: 27.04.2016
Сообщений: 549
24.10.2022, 14:53 3
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Если свойство MatrixValue определить  default
---
 property MatrixValue[i, j: integer]: integer read GetMatrixValue write SetMatrixValue;default;
---
// то можно обращаться как к обычному массиву:
var
  m : TMyMatrix;
begin
  m := TMyMatrix.Create;
  m.SetSize(2, 2);
  m[1, 0] := 244;
  m[1, 1] := 123;
---
// удобно, когда этих массивов дофига
// впрочем, на любителя
1
Модератор
3758 / 2262 / 783
Регистрация: 15.11.2015
Сообщений: 8,997
24.10.2022, 14:54 4
Согласен, default не помешает.
0
Модератор
9643 / 6250 / 2426
Регистрация: 21.01.2014
Сообщений: 26,663
Записей в блоге: 3
24.10.2022, 15:00 5
Цитата Сообщение от AzAtom Посмотреть сообщение
property MatrixValue[i, j: integer]: integer read ...
скобки-то чего квадратные?
0
Модератор
3758 / 2262 / 783
Регистрация: 15.11.2015
Сообщений: 8,997
24.10.2022, 15:04 6
D1973, ну так, чтобы обращаться, как к массиву.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
33003 / 21306 / 8183
Регистрация: 22.10.2011
Сообщений: 36,609
Записей в блоге: 8
24.10.2022, 15:04 7
Цитата Сообщение от D1973 Посмотреть сообщение
скобки-то чего квадратные?
А какие скобки должны быть у array property?
0
24.10.2022, 15:04
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.10.2022, 15:04
Помогаю со студенческими работами здесь

Как получить private переменную класса, функцей членом другого класса
Игра змейка: Есть класс поле в котором содержится размеры поля: class field { private: ...

Добавить элемент в private массив класса
Здравствуйте. Нужно через public метод класса добавлять элементы в массив (setScores()), а потом...

Массив как поле класса
Мне нужно сделать : -Три поля: 1.Массив целых чисел. 2.Сумма элементов массива. 3.Длинна...

Массив как поле класса
Здравствуйте. Пишу класс на Яве, называющийся vector. Столкнулся с такой проблемой: у меня есть 9...

Массив как поле класса
Например, имеется класс с полем массивом размерностью 10 на 10. class massiv { private: int mas;...

Массив, как поле данных класса
Как правильно обьявить массив char как элемент данных класса и проинициализировать его нулями в...

Динамический массив как поле класса
У меня есть класс Комплексных чисел, в котором реализована возможность для +, -, *. /, получения...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Блоги программистов
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­хро­н­н­ы­й счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru