Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как объявить константу внутри класса? 
V
    Опции темы
Dmi3ev
Дата 15.6.2009, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Код

class Mins
{
//...
private:
        Graphics::TBitmap *tb;
        int x;
        int y;
        int w;
        int m;
        static const int ts;
};

const int Mins::ts=40;

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

Добавлено @ 14:07
те есть константа
Код

const int G=13;

и есть массив
Код

int mas[G][G];

и вот такую штуку надо внутри класса сделать... как???

Это сообщение отредактировал(а) Dmi3ev - 15.6.2009, 14:07


--------------------

PM MAIL   Вверх
mes
Дата 15.6.2009, 14:07 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



enum ?


--------------------
PM MAIL WWW   Вверх
Dmi3ev
Дата 15.6.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

enum ? 

я сначала непонятно похоже сказал...

Добавлено через 16 секунд
нет, это не то...


--------------------

PM MAIL   Вверх
mrbrooks
Дата 15.6.2009, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



PM MAIL   Вверх
azesmcar
Дата 15.6.2009, 14:22 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

как объявить константу внутри класса?


Код

class A
{
public:
    A(): c_i(1) {}

private:
    const int c_i;
};


Добавлено через 2 минуты и 32 секунды
насчет массива - тут нужна константа времени компиляции.
1.
Код

class A
{
public:
    enum { c_i = 10 };
    int m[c_i];
};

2.
Код

template <unsigned int sz>
class A
{
public:
    int m[sz];
};


Это сообщение отредактировал(а) azesmcar - 15.6.2009, 14:22
PM   Вверх
Dmi3ev
Дата 15.6.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Те получается, что единственным выходом (если нужно использовать константу для объявления длины массива) является использование enum?

Добавлено через 1 минуту и 38 секунд
или второй вариант 
Цитата

template <unsigned int sz>
class A
{
public:
    int m[sz];
};

который мне не очень понятен... можно на примере, допустим размер 10х10


--------------------

PM MAIL   Вверх
azesmcar
Дата 15.6.2009, 14:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Dmi3ev @  15.6.2009,  14:39 Найти цитируемый пост)
Те получается, что единственным выходом (если нужно использовать константу для объявления длины массива) является использование enum? 


нет почему же, еще шаблоны, еще так можно
Код

class A
{
private:
    static const int c_i = 10;
public:
    int m[c_i];
};

PM   Вверх
Dmi3ev
Дата 15.6.2009, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

Цитата

enum ? 

я сначала непонятно похоже сказал...

Добавлено через 16 секунд
нет, это не то... 

mes, извини, я сначала думал, что это не выход... в смысле не самый правильный...


--------------------

PM MAIL   Вверх
azesmcar
Дата 15.6.2009, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Dmi3ev @  15.6.2009,  14:39 Найти цитируемый пост)
который мне не очень понятен... можно на примере, допустим размер 10х10 

Код

template <unsigned int m, unsigned int n>
class A
{
public:
    int m[m][n];
};
/* ... */

A<10, 10> obj;


только в этом случае для кажой комбинации чисел будет сгенерирован отдельный класс со встроенными числами. Это немного другое, смотря что надо.
PM   Вверх
Dmi3ev
Дата 15.6.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

Это немного другое, смотря что надо. 

надо просто задавать размеры массивов + использовать в методах для расчетов...
буду юзать enum, он уместней в моей задаче, да и понятней... я так думаю, это правильно.
спасибо!  smile 


--------------------

PM MAIL   Вверх
azesmcar
Дата 15.6.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Dmi3ev @  15.6.2009,  14:50 Найти цитируемый пост)
буду юзать enum, он уместней в моей задаче

 smile 

static const int тоже подойдет.
PM   Вверх
mes
Дата 15.6.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(azesmcar @  15.6.2009,  13:52 Найти цитируемый пост)
static const int тоже подойдет. 

В частности для массивов объявленных в теле класса не подойдет  smile 

Это сообщение отредактировал(а) mes - 15.6.2009, 14:56


--------------------
PM MAIL WWW   Вверх
Dmi3ev
Дата 15.6.2009, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

В частности для массивов объявленных в теле класса не подойдет

да  smile 
не подойдет, поэтому и спрашивал, собственно...


--------------------

PM MAIL   Вверх
azesmcar
Дата 15.6.2009, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(mes @  15.6.2009,  14:56 Найти цитируемый пост)
В частности для массивов объявленных в теле класса не подойдет  smile 

что имеется ввиду под телом класса? smile 
PM   Вверх
Dmi3ev
Дата 15.6.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



мне надо было, чтобы можно было написать
Код

private:
    int mas[mysize][mysize];

вот таким макаром
Код

//...
private:
    static const int mysize;
    int mas[mysize][mysize];
//...
const int Mins::mysize=10;

это сделать нельзя, поэтому я и спрашивал...


--------------------

PM MAIL   Вверх
azesmcar
Дата 15.6.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Dmi3ev @  15.6.2009,  15:05 Найти цитируемый пост)

вот таким макаром
Выделить всёкод C++
1:
2:
3:
4:
5:
6:
    
//...
private:
    static const int mysize;
    int mas[mysize][mysize];
//...
const int Mins::mysize=10;

разумеется так нельзя
Код

class A
{
public:
    static const int mysize = 10;
    int mas[mysize][mysize];
};

так можно.
PM   Вверх
Dmi3ev
Дата 15.6.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



но так мне не нужно...


--------------------

PM MAIL   Вверх
azesmcar
Дата 15.6.2009, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Dmi3ev @  15.6.2009,  15:09 Найти цитируемый пост)
но так мне не нужно... 

честно говоря не понял в чем разница, но не важно smile 
PM   Вверх
Dmi3ev
Дата 15.6.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

честно говоря не понял в чем разница, но не важно 

да  smile заюзал enum и нормально, работает уже, и ладно...


--------------------

PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1268 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.