Меню Закрыть

C статический массив в классе

Содержание

у меня как 5 ошибок при попытке скомпилировать код ниже.
это как: они в основном указывают на static string rzym а также static int arab ,
основные ошибки:
В функции arab2rzym:

Я был бы благодарен за помощь! Я устал от некоторых вещей, но все еще куча ошибок. Я хочу использовать элементы из класса без создания объекта. Есть идеи?

Решение

Вы не можете получить доступ к нестатическим переменным-членам класса из статических функций-членов. Вам также нужно сделать их статичными:

Также те должны быть определены отдельно (в вашем классе ‘ .cpp файл обычно):

Кроме того, обратите внимание, что вы не используете static ключевое слово для (не встроенного) определения вашей статической функции (это неверный синтаксис). Просто пиши:

Смотрите полностью исправленный, компилируемый и работающий пример Вот Пожалуйста.

Другие решения

Сделка с учебный класс (также известный как «статический») против пример Функции-члены — это то, что функция-член экземпляра может обращаться как к статическим, так и к элементам-экземплярам (переменным и функциям), в то время как статические функции-члены могут обращаться только к статическим элементам. Вот почему вам нужно сделать

член static в классе:

Инициализатор должен перейти в файл cpp:

Наконец, вы ссылаетесь на статические члены с помощью оператора разрешения области :: не с точкой:

Я метод, который объявлен static не может получить доступ к членам данных в классе.
Возможно, вам следует бросить static везде?

Вы не можете получить доступ к нестатическим членам класса из статического метода того же класса без объекта этого класса. Нестатические члены существуют только в контексте объекта и не могут быть доступны из статических методов, которые имеют область видимости класса.

Так что вы либо:

  • сделать все члены статичными
  • сделать все члены нестатичными
  • передать объект статическим методам, используемым для доступа к нестатическим членам

Также обратите внимание, что ключевое слово static необходимо только при объявлении функции, а не при ее определении.

Это невозможно Статический метод может получить доступ только к другим общим вещам (переменным, другим методам и т. Д.).

Пример:
Скажем, у нас есть класс Square. Вы можете создать объект, передав высоту и ширину в конструктор.

Класс Square имеет метод для получения площади объекта. Так вы бы назвали это так:

double area = mySquare.getArea();

Это работает, и все потому, что вы используете переменные экземпляра для высоты и ширины этого конкретного объекта для его вычисления. Но допустим, мы хотим вычислить площадь квадрата до того, как создадим объект, чтобы убедиться, что он действителен. Поэтому мы бы назвали статический getArea(double w, double h) метод, который находится в классе Square.

double area = Square.getArea(2,4);

Это работает. Но если вы попытались позвонить getArea() Метод (у которого нет параметров) выдаст вам ошибку, потому что он не будет знать, какую высоту и ширину использовать, потому что они еще не определены.

Читайте также:  Handy backup for cloud

Подскажите, пожалуйста, как инициализировать статический массив в качестве статического поля класса в С++. Ведь инициализация статических полей проводится в глобальной области, а в ней нельзя писать цикл for (для того, чтобы через цикл инициализировать каждый элемент).

2 ответа 2

Это вас устроит?

Или проблема в чем-то ином? тогда поясните, в чем.

В С++ массивы в области статической памяти или памяти потока можно инициализировать только списком константных выражений. Это действие формируется на момент компиляции. Внутри функции можно написать:

а для глобального массива или статического поля такое будет неверно. Если нужно инициализировать все или часть элементов нулями. достаточно написать

Если вам нужны не константные значения, придётся определить точку, где будет происходить их присвоение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками c++ массивы или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.1.10.35756

Ярким примером ссылочного типа данных являются массивы (как объекты!).

Массив представляет собой совокупность переменных одного типа с общим для обращения к ним именем.
В C# массивы могут быть как одномерными, так и многомерными.
Массивы служат самым разным целям, поскольку они предоставляют удобные средства для объединения связанных вместе переменных.
Массивами в C# можно пользоваться практически так же, как и в других языках программирования.
Тем не менее, у них имеется одна особенность: они реализованы в виде объектов. Смотрите также заметку «Массивы. Класс System.Array».
Объединение данных возможно и в коллекции, об этом — в статье Класс ArrayList. Пример необобщенной коллекции

Объявление массивов

Для того чтобы воспользоваться массивом в программе, требуется двухэтапная процедура. Во-первых, необходимо объявить переменную, которая может обращаться к массиву. И во-вторых, нужно создать экземпляр массива (объект), используя оператор new.

Важно! Если массив только объявляется, но явно не инициализируется, каждый его элемент будет установлен в значение, принятое по умолчанию для соответствующего типа данных (например, элементы массива типа bool будут устанавливаться в false, а элементы массива типа int — в 0). В примере, если мы удалим строки с инициализацией, будет напечатано пять нулей.

Примечание. Такие же действия с полями объекта-структуры выполняет конструктор по умолчанию (без параметров).

Доступ к элементам массива

Для обращения к элементам массива используются индексы . Индекс представляет номер элемента в массиве, при этом нумерация начинается с нуля, поэтому индекс первого элемента будет равен 0. А чтобы обратиться к пятому элементу в массиве, нам надо использовать индекс 4, к примеру: myArr[4] .

Инициализация массива

Помимо заполнения массива элемент за элементом (как показано в предыдущем примере), можно также заполнять его с использованием специального синтаксиса инициализации массивов.

Читайте также:  Sony hdr cx580e инструкция

Для этого необходимо перечислить включаемые в массив элементы в фигурных скобках < >. Такой синтаксис удобен при создании массива известного размера, когда нужно быстро задать его начальные значения:

1) инициализация массива с использованием ключевого слова new:
int[] m1 = new int[] <10,20,30,40,50>;

2) инициализации строкового массива без использования слова new:
string[] m2 = < «Фамилия», «Имя», «Отчество» >;

3) используем ключевое слово new и желаемый размер массива символов:
char[] m3 = new char[4] < ‘Я’,’з’,’ы’,’к’ >;

Обратите внимание, что в случае применения синтаксиса с фигурными скобками размер массива указывать не требуется (как видно на примере создания переменной m1), поскольку этот размер автоматически вычисляется на основе количества элементов внутри фигурных скобок.

Кроме того, применять ключевое слово new не обязательно (как при создании массива m2).

Неявно типизированные массивы

Ключевое слово var позволяет определить переменную так, чтобы лежащий в ее основе тип выводился компилятором. Аналогичным образом можно также определять неявно типизированные локальные массивы. С использованием такого подхода можно определить новую переменную массива без указания типа элементов, содержащихся в массиве.

Результат:

Разумеется, как и при создании массива с использованием явного синтаксиса C#, элементы, указываемые в списке инициализации массива, должны обязательно иметь один и тот же базовый тип (т.е. должны все быть int, string или char). Обратите внимание на метод GetType(), позволяющий программным путем определять тип элементов массива.

Определение массива объектов

В большинстве случаев при определении массива тип элемента, содержащегося в массиве, указывается явно.

Хотя на первый взгляд это выглядит довольно понятно, существует одна важная особенность. В основе каждого типа в системе типов .NET (в том числе фундаментальных типов данных) в конечном итоге лежит базовый класс System.Object.

В результате получается, что в случае определения массива объектов находящиеся внутри него элементы могут представлять собой что угодно.

Если обратимся к определению массива, данному выше: «Массив представляет собой совокупность переменных одного типа с общим для обращения к ним именем», то это выглядит несколько противоречиво. Но тем не менее, все это возможно потому, что каждый элемент является объектом. Приведем пример:

Результат:

Обратите внимание на четвертый тип цикла foreach (object me in arrByObject). Легко запомнить: Для каждого (for each) объекта с именем me, входящего в (in) массив arrByObject (учите английский!). На печать выводится как сам объект (элемент массива объектов), так и тип этого объекта (метод GetType(), присущий всем объектам класса Object, от которого наследуются все типы).

Свойство Length

Реализация в C# массивов в виде объектов дает целый ряд преимуществ. Одно из них заключается в том, что с каждым массивом связано свойство Length, содержащее число элементов, из которых может состоять массив. Следовательно, у каждого массива имеется специальное свойство, позволяющее определить его длину.

Когда запрашивается длина многомерного массива, то возвращается общее число элементов, из которых может состоять массив. Благодаря наличию у массивов свойства Length операции с массивами во многих алгоритмах становятся более простыми, а значит, и более надежными.

Читайте также:  Реле вл 64ухл4 схема

Вставим в предыдущем примере перед Console.ReadKey() оператор
Console.WriteLine(arrByObject.Length);
Будет напечатано значение, равное 4 (число объектов в массиве). Чаще всего оно используется для задания числа элементов массива в цикле for<>.

Многомерные массивы

Многомерным называется такой массив, который отличается двумя или более измерениями, причем доступ к каждому элементу такого массива осуществляется с помощью определенной комбинации двух или более индексов. Многомерный массив индексируется двумя и более целыми числами.

Двумерные массивы. Простейшей формой многомерного массива является двумерный массив. Местоположение любого элемента в двумерном массиве обозначается двумя индексами. Такой массив можно представить в виде таблицы, на строки которой указывает первый индекс, а на столбцы — второй. Пример объявления и инициализации двумерного массива показан ниже:

Обратите особое внимание на способ объявления двумерного массива. Схематическое представление массива myArr[,] показано ниже:

Заметим, что в программе используется еще один объект – ran, принадлежащий к классу Random, метод которого (функция Next() ) возвращает целое число в заданном диапазоне (1,15).

В C# допускаются массивы трех и более измерений. Ниже приведена общая форма объявления многомерного массива:
тип[,…,] имя_массива = new тип[размер1, размер2, … размеры];

Инициализация многомерных массивов

Для инициализации многомерного массива достаточно заключить в фигурные скобки список инициализаторов каждого его размера:
тип[,] имя_массива = <
,
< val, val, val, …, val>,

>;
где val обозначает инициализирующее значение, а каждый внутренний блок — отдельный ряд.

Первое значение в каждом ряду сохраняется на первой позиции в массиве, второе значение — на второй позиции и т.д.

Обратите внимание на то, что блоки инициализаторов разделяются запятыми, а после завершающей эти блоки закрывающей фигурной скобки ставится точка с запятой.

Ниже в качестве примера приведена общая форма инициализации двумерного массива (4 строки, 2 столбца):

Перейдем к рассмотрению примеров решения задач, где применяются массивы и циклы.

Задача «Три цикла»

Требуется найти сумму и произведение N элементов массива, используя три варианта циклов (for, while, do-while).
Решение. В классе Program объявим статический массив действительных чисел a[1000] и 7 методов (кроме Main()), ввод исходных данных и вычисление сумм и произведений с использованием трех типов циклов.

Тогда наша программа может быть написана так:

Результат:

Задание. Сравните алгоритмы вычисления суммы и произведения и циклы между собой, найдите общее и различия.

Оператор foreach

Последний пример иллюстрирует применение оператора foreach к массивам. Если есть необходимость выполнить некоторые действия со всеми элементами массивов, то этот оператор цикла будет самым кратким.

Результат:

Задачи, предполагающие использование массивов и циклов, подробно рассмотрены в разделе «Примеры решения задач на тему «Массивы строки»»

Перейдем к рассмотрению объектов, относящихся к классу String (строка).

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.