Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
19.04.2013, 11:05     Как получить доступ к массиву из другого класса? #1
Подскажите, есть такой код:

C++
1
2
3
switch(o_field.fieldArray[o_player.getPlayerPositionX()][o_player.getPlayerPositionY()]) {
    // Код  
}
Этот код находится в классе А, а массив fieldArray определен в классе В. Для индексов
массива я могу получить доступ через геттеры, а вот само имя массива подчеркивает
красным, пишет, что B::fieldArray недоступно. Как получить к нему доступ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.04.2013, 11:26     Как получить доступ к массиву из другого класса? #2
Цитата Сообщение от dimkaok Посмотреть сообщение
o_field.fieldArray[o_player.getPlayerPositionX()][o_player.getPlayerPositionY()]
сделай в классе В метод, который возвращает значение массива
dimkaok
 Аватар для dimkaok
1 / 1 / 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};
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.04.2013, 11:31     Как получить доступ к массиву из другого класса? #4
никак, так как оно(перечисление) приватное
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
19.04.2013, 11:36  [ТС]     Как получить доступ к массиву из другого класса? #5
Цитата Сообщение от Jupiter Посмотреть сообщение
никак, так как оно(перечисление) приватное
То есть его нужно сделать protected и через наследование, либо сделать public?
И больше никак? Может, методы доступа для enum пишутся?

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

А вообще нормально-ли определять константы в public?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.04.2013, 11:52     Как получить доступ к массиву из другого класса? #8
Цитата Сообщение от dimkaok Посмотреть сообщение
А вообще нормально-ли определять константы в public?
если константа статическая то нормально, если у каждого объекта свое значение константы то лучше определить метод который возвращает значение константы
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.04.2013, 12:03     Как получить доступ к массиву из другого класса? #9
Цитата Сообщение от Jupiter Посмотреть сообщение
это изврат
Почему? Это же enum. Что плохого, если он должен быть виден наследникам и не виден снаружи?

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

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

Цитата Сообщение от Tulosba Посмотреть сообщение
И не понятно почему static Вы выделили особняком.
Ещё хотелось бы заметить про БОЛЬШИЕ константные объекты. Копировать при возврате - не гуд, а возвращать константную ссылку, так это тоже самое, что и сам объект открыть (за исключением возможности дополнительных действий при доступе).
да потому что static не принадлежит объекту
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
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 при попытке присваивания.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
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
}
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.04.2013, 13:44     Как получить доступ к массиву из другого класса? #15
Цитата Сообщение от Jupiter Посмотреть сообщение
но я то говорил о константах объекта, а не класса
а чем нам поможет геттер в таком случае, если он возвращает не копию, конечно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2013, 14:12     Как получить доступ к массиву из другого класса?
Еще ссылки по теме:

C++ Как получить доступ к членам класса из функций
Потоки, static. Доступ к полю класса из другого потока C++
Как получить доступ к методам класса, который содержится в векторе класса C++

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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.04.2013, 14:12     Как получить доступ к массиву из другого класса? #16
Цитата Сообщение от Tulosba Посмотреть сообщение
если он возвращает не копию, конечно?
ничем конечно не поможет, вопрос холиварный
Yandex
Объявления
19.04.2013, 14:12     Как получить доступ к массиву из другого класса?
Ответ Создать тему
Опции темы

Текущее время: 07:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru