Php define
Автор Sooqua задал вопрос в разделе Другие языки и технологии
[C++] #define и получил лучший ответ
Ответ от Николай Веселуха[гуру]
#define - директива препроцессора, используемая для определения символьных констант, содержит идентификатор и символьную строку. Компилятор, встретив в исходном коде программы идентификатор, тупо, подставляет вместо него символьную строку, которая соответствует этому идентификатору.
enum - перечисление - множество поименованных констант, типа int. Каждая из констант может быть инициализирована обычным образом, если инициализация отсутствует, то первая константа имеет значение равное 0, каждая последующая увеличивает своё значение на единицу.
В обоих случаях ни о каком прямом и косвенном доступе не может быть и речи.
Что же касается инициализированных полей класса, то мало сделать их статическими, также требуется сделать их и константными.
....
class test {
public:
static const short MoveType_None = 0;
static const short MoveType_Left = 1;
};
int main() {
test::MoveType_Left;// теперь можно обратиться
return 0;
}
То же, но со структурой.. .
struct test {
static const short MoveType_None = 0;
static const short MoveType_Left = 1;
};
int main() {
test::MoveType_Left;
return 0;
}
enum религия использовать запрещает?
Создай класс, и вызывай значения статистических элементов класса без создания экземпляра..
Согласен с предыдущим, но статические константы должны описываться за пределами описания класса.
Т. е. ,
struct test { // описание класса в заголовочном файле (*.H)
static const short MoveType_Nоne;
static const short MoveType_Left;
};
const short test::MoveType_Nоne = 0; // эта строка должна быть в другом файле (*.CPP), причём только в одном
Логичнее использовать enum
и namespace
namespace MoveType
{
enum { None = 0, Left = 1 };
}
или структуру/класс
struct MoveType
{
enum { None = 0, Left = 1 };
};
Обращаться через ::, а не через.
например, MoveType::Left