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


Автор: zabludshiy 2.12.2012, 22:31
Задача:
1. объявить константу в созданном классе и сделать ее видимой для всех методов данного класса;
2. объявить массив, размер которого определяет созданная константа.
Среда разработки Visual C++ 6.0

В итоге у меня получилось: 
Код

// MyClass.h: interface for the MyClass class.
 
class MyClass  
{
    static const RANGE_VERH;
    // нужно ли здесь объявлять так int MyMass[RANGE_VERH] или может так int MyMass[] или нет не пойму;
public:
    MyClass();
    virtual ~MyClass();
 
};


Код

// MyClass.cpp: implementation of the MyClass class.
 
const MyClass::RANGE_VERH = 100;
 
MyClass::MyClass()
{
    int MyMass[RANGE_VERH];
}
 
MyClass::~MyClass()
{
 
}


С инициализацией константы есть сомнения поэтому интересует, как все-таки правильно объявлять и инициализировать константу в создаваемом классе, чтобы потом ее можно было использовать в конструкторе и любом методе класса. По поводу массива тоже не понял, нужно ли его объявлять в MyClass.h, а инициализировать в MyClass.cpp или сразу объявить в описании конструктора MyClass.cpp? Если да, то как и где правильно объявить массив с размером, заданным константой в создаваемом классе?
Если я объявляю массив в файле MyClass.cpp, не объявляя его в MyClass.h, а константы объявляю, как указано в примере в MyClass.h:

Код

static const RANGE_VERH;


, а в MyClass.cpp:
    

Код

сonst MyClass::RANGE_VERH = 100;


компилятор ошибок не выдал, но правильно ли такое объявление? 

Автор: volatile 2.12.2012, 23:40
Цитата(zabludshiy @  2.12.2012,  22:31 Найти цитируемый пост)
я объявляю массив в файле MyClass.cpp, не объявляя его в MyClass.h

так низя.

Цитата(zabludshiy @  2.12.2012,  22:31 Найти цитируемый пост)
MyClass::MyClass()
{
    int MyMass[RANGE_VERH];
}

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

Нужно так:
в .h
Код

class MyClass  
{
    static const int RANGE_VERH = 100;
    int MyMass [RANGE_VERH];

public:
    MyClass();
    virtual ~MyClass();
...

а в cpp ничо не нужно. 
в смысле ни константу ни массив в сипипи не надо прописывать.




Автор: volatile 2.12.2012, 23:57
Цитата(zabludshiy @  2.12.2012,  22:31 Найти цитируемый пост)
Среда разработки Visual C++ 6.0

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

если что, тогда делайте так:
Код

class MyClass
{
    enum {RANGE_VERH = 100};
    int MyMass [RANGE_VERH];

public:
    MyClass();
    virtual ~MyClass();
...
};

Автор: Dem_max 3.12.2012, 04:06
Забудь про Visual C++ 6

Автор: zabludshiy 3.12.2012, 20:41
volatile, подскажите пожалуйста, а при объявлении RANGE_VERH через перечисление 
Код

 enum {RANGE_VERH = 100};
, будет ли виден RANGE_VERH в создаваемых методах класса  MyClass, если, например, его нужно будет использовать в циклах заполнения массива MyMass в файле MyClass.cpp? Какова будет область видимости RANGE_VERH?

Автор: volatile 3.12.2012, 23:27
Цитата(zabludshiy @  3.12.2012,  20:41 Найти цитируемый пост)
Какова будет область видимости RANGE_VERH? 

RANGE_VERH будет виден во всех методах класса, как компайл-тайм константа;
Вообще будет виден везде, где проинклуден .h
Если его перенести в публичную область, то будет также доступен и вне класса, как MyClass::RANGE_VERH;



Автор: zabludshiy 4.12.2012, 20:08
Спасибо за ответы

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