Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
2 / 2 / 0
Регистрация: 06.03.2013
Сообщений: 128
1

Как получить доступ к массиву из другого класса?

19.04.2013, 11:05. Показов 2665. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, есть такой код:

C++
1
2
3
switch(o_field.fieldArray[o_player.getPlayerPositionX()][o_player.getPlayerPositionY()]) {
    // Код   
}
Этот код находится в классе А, а массив fieldArray определен в классе В. Для индексов
массива я могу получить доступ через геттеры, а вот само имя массива подчеркивает
красным, пишет, что B::fieldArray недоступно. Как получить к нему доступ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2013, 11:05
Ответы с готовыми решениями:

Получить доступ к массиву в методе другого класса
Всем привет! Я все же еще новичок в программировании и вот возник вопрос. Есть матрица, которая...

Доступ к массиву другого класса
В 1 классе есть матрица. Я хочу сделать копию данной матрицы во 2й класс. Как это сдлеать...

доступ к массиву из другого класса
Всем привет. Чета не пойму как сделать такое: есть класс Form1.cs(при создании), добавил новый...

Как получить доступ к DataGridView из другого класса
Есть форма Administrator, на ней DataGridView. Есть класс Admin_Panel, как из этого класса...

15
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.04.2013, 11:26 2
Цитата Сообщение от dimkaok Посмотреть сообщение
o_field.fieldArray[o_player.getPlayerPositionX()][o_player.getPlayerPositionY()]
сделай в классе В метод, который возвращает значение массива
1
2 / 2 / 0
Регистрация: 06.03.2013
Сообщений: 128
19.04.2013, 11:30  [ТС] 3
Ага, понятно. А вот еще вопрос, если есть перечисление, как к его элементам
получить доступ из другого класса?

C++
1
2
3
4
5
6
7
private:
  enum thingsOnTheField {thingsOnTheField_FOOD,
                   thingsOnTheField_ENEMY,
                   thingsOnTheField_WEAPON,
                   thingsOnTheField_HOME,
                   thingsOnTheField_NOTHING,
                   lengthOfEnum};
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.04.2013, 11:31 4
никак, так как оно(перечисление) приватное
1
2 / 2 / 0
Регистрация: 06.03.2013
Сообщений: 128
19.04.2013, 11:36  [ТС] 5
Цитата Сообщение от Jupiter Посмотреть сообщение
никак, так как оно(перечисление) приватное
То есть его нужно сделать protected и через наследование, либо сделать public?
И больше никак? Может, методы доступа для enum пишутся?

Добавлено через 2 минуты
А если определить константу в классе как public - это нормально?
Их-же все-равно нельзя изменять
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.04.2013, 11:43 6
Цитата Сообщение от dimkaok Посмотреть сообщение
То есть его нужно сделать protected и через наследование
это изврат
Цитата Сообщение от dimkaok Посмотреть сообщение
сделать public?
скорее всего это будет лучший вариант
Цитата Сообщение от dimkaok Посмотреть сообщение
И больше никак?
класс в котором нужно использовать перечисления перечисления можно объявить френдом в классе в котором эти перечисления объявлены
1
2 / 2 / 0
Регистрация: 06.03.2013
Сообщений: 128
19.04.2013, 11:47  [ТС] 7
Цитата Сообщение от Jupiter Посмотреть сообщение
То есть его нужно сделать protected и через наследование
это изврат
Слава Богу, а то я не сильно хочу так делать

А вообще нормально-ли определять константы в public?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.04.2013, 11:52 8
Цитата Сообщение от dimkaok Посмотреть сообщение
А вообще нормально-ли определять константы в public?
если константа статическая то нормально, если у каждого объекта свое значение константы то лучше определить метод который возвращает значение константы
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
19.04.2013, 12:03 9
Цитата Сообщение от Jupiter Посмотреть сообщение
это изврат
Почему? Это же enum. Что плохого, если он должен быть виден наследникам и не виден снаружи?

Цитата Сообщение от Jupiter Посмотреть сообщение
если константа статическая то нормально, если у каждого объекта свое значение константы то лучше определить метод который возвращает значение константы
Не могли бы пояснить, чем лучше?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.04.2013, 12:34 10
Цитата Сообщение от Tulosba Посмотреть сообщение
Почему? Это же enum. Что плохого, если он должен быть виден наследникам и не виден снаружи?
если цель создания наследника только получение доступа к enum то изврат
наследование надо применять только тогда когда оно действительно нужно.

Цитата Сообщение от Tulosba Посмотреть сообщение
Не могли бы пояснить, чем лучше?
для защиты от const_cast, для запрета взятия адреса ну и для солидарности с не константами
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
19.04.2013, 12:43 11
Цитата Сообщение от Jupiter Посмотреть сообщение
если цель создания наследника только получение доступа к enum то изврат
Если так, то да. Как раз подумал об этом после сабмита сообщения
Цитата Сообщение от Jupiter Посмотреть сообщение
для защиты от const_cast
Ошибка доступа же будет в рантайме.
И не понятно почему static Вы выделили особняком.
Ещё хотелось бы заметить про БОЛЬШИЕ константные объекты. Копировать при возврате - не гуд, а возвращать константную ссылку, так это тоже самое, что и сам объект открыть (за исключением возможности дополнительных действий при доступе).
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.04.2013, 12:59 12
Цитата Сообщение от Tulosba Посмотреть сообщение
Ошибка доступа же будет в рантайме.
а подробнее?

Цитата Сообщение от Tulosba Посмотреть сообщение
И не понятно почему static Вы выделили особняком.
Ещё хотелось бы заметить про БОЛЬШИЕ константные объекты. Копировать при возврате - не гуд, а возвращать константную ссылку, так это тоже самое, что и сам объект открыть (за исключением возможности дополнительных действий при доступе).
да потому что static не принадлежит объекту
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
19.04.2013, 13:02 13
Цитата Сообщение от Jupiter Посмотреть сообщение
а подробнее?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
struct A
{
    static const int i;
};
 
const int A::i = 42;
 
int main()
{
    cout << A::i << endl;
 
    int* v = const_cast<int*>( &A::i );
 
    *v = 24;
 
    cout << A::i << endl;
}
Ловлю Access Violation в VS2010 при попытке присваивания.
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.04.2013, 13:04 14
Цитата Сообщение от Tulosba Посмотреть сообщение
Ловлю Access Violation в VS2010 при попытке присваивания.
аналогично и на gcc, но я то говорил о константах объекта, а не класса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Foo
{
public:
  const int mConst;
  Foo() : mConst(100) { }
};
 
#include <iostream>
 
int main()
{
    Foo f;
    const_cast<int&>(f.mConst) = 500;
    std::cout << f.mConst; //500
}
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
19.04.2013, 13:44 15
Цитата Сообщение от Jupiter Посмотреть сообщение
но я то говорил о константах объекта, а не класса
а чем нам поможет геттер в таком случае, если он возвращает не копию, конечно?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.04.2013, 14:12 16
Цитата Сообщение от Tulosba Посмотреть сообщение
если он возвращает не копию, конечно?
ничем конечно не поможет, вопрос холиварный
0
19.04.2013, 14:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2013, 14:12
Помогаю со студенческими работами здесь

Как получить доступ к методу из другого класса?
public partial class Form1 : Form { private void button1_Click(object sender,...

Как получить доступ к объекту другого класса
Здравствуйте друзья. Прошу помощи по вопросу В главном viewController cоздаю объект Label и...

Как получить доступ к переменной из другого класса
namespace ViewModel { public class AFViewModel : ViewModelBase { private int _SecPauseDel = 0;...

Как получить доступ к CardLayout из другого класса?
Здравствуйте, в общем суть вопроса такова. Есть два класса MainClass и SubClass в MainClasss...


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

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