Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > как объявить константу внутри класса?


Автор: Dmi3ev 15.6.2009, 14:04
Код

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];

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

Автор: mes 15.6.2009, 14:07
enum ?

Автор: Dmi3ev 15.6.2009, 14:08
Цитата

enum ? 

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

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

Автор: mrbrooks 15.6.2009, 14:12
Dmi3ev, 
http://forum.vingrad.ru/forum/topic-255790/anchor-entry1844387/0.html

Автор: azesmcar 15.6.2009, 14:22
Цитата

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


Код

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];
};

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

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

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

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

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


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

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

Автор: Dmi3ev 15.6.2009, 14:43
Цитата

Цитата

enum ? 

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

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

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

Автор: azesmcar 15.6.2009, 14:45
Цитата(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;


только в этом случае для кажой комбинации чисел будет сгенерирован отдельный класс со встроенными числами. Это немного другое, смотря что надо.

Автор: Dmi3ev 15.6.2009, 14:50
Цитата

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

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

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

 smile 

static const int тоже подойдет.

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

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

Автор: Dmi3ev 15.6.2009, 14:59
Цитата

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

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

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

что имеется ввиду под телом класса? smile 

Автор: Dmi3ev 15.6.2009, 15:05
мне надо было, чтобы можно было написать
Код

private:
    int mas[mysize][mysize];

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

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

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

Автор: azesmcar 15.6.2009, 15:07
Цитата(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];
};

так можно.

Автор: Dmi3ev 15.6.2009, 15:09
но так мне не нужно...

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

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

Автор: Dmi3ev 15.6.2009, 15:23
Цитата

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)