Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объявление константы и массива в классе, Объявление константы и массива в классе  
V
    Опции темы
zabludshiy
  Дата 2.12.2012, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задача:
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;


компилятор ошибок не выдал, но правильно ли такое объявление? 
PM MAIL   Вверх
volatile
Дата 2.12.2012, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 4
Всего: 85



Цитата(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 ничо не нужно. 
в смысле ни константу ни массив в сипипи не надо прописывать.




PM MAIL   Вверх
volatile
Дата 2.12.2012, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 4
Всего: 85



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

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

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

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

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

PM MAIL   Вверх
Dem_max
Дата 3.12.2012, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 1
Всего: 39



Забудь про Visual C++ 6


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
zabludshiy
Дата 3.12.2012, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

 enum {RANGE_VERH = 100};
, будет ли виден RANGE_VERH в создаваемых методах класса  MyClass, если, например, его нужно будет использовать в циклах заполнения массива MyMass в файле MyClass.cpp? Какова будет область видимости RANGE_VERH?
PM MAIL   Вверх
volatile
Дата 3.12.2012, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 4
Всего: 85



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

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



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


Новичок



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

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



Спасибо за ответы
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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