Глава 9. Описатели и спецификаторы данных________________________203
text[STRLEN] = '\0';
}
char text[STRLEN + 1]; // Прибавить 1 для '\0' };
// typedef используется для упрощения внешнего вида кода. typedef DUMMY_STRING<20> STR;
char *ReturnLocalString() {
STR str("Здравствуй, мир!");
// Применяет str.operator char*() к объектам DUMMY_STRING
return str;
}
char *ReturnStaticString()
{
static STR strC'Я все еще здесь!");
// Применяет str.operator char*()
return str;
}
void mainf)
{
cout « "Локальная строка: " « ReturnLocalString() « endl;
cout « "Статическая строка: " « ReturnStaticString() « endl;
i
Первая строка кода главной функции напечатает ахинею, демонстрируя, что в объект попал "мусор". Второй оператор вывода просто выдаст "Я все еще здесь!" — ибо это правда. Объект, содержащий эту строку, был определен как статический. Только в одном этом фрагменте используется сразу несколько средств языка. Узнаете ли вы их?
Следующий раздел, как упоминалось ранее, можно отложить до тех пор, пока вы не прочтете главу 14 "Базовые концепции классов". Ключевое слово static имеет различные значения в зависимости от контекста, в котором используется. В этом разделе мы обсудили одно из его значений. В следующем разделе static используется уже в другом контексте, связанном с классами, так что его чтение можно отложить. Для полного понимания применения static в контексте классов вам необходимо иметь глубокое представление о классах и их элементах.
Статические элементы
Данные и функции — элементы классов могут быть объявлены как статические (static). Определение класса — это перечень того, что есть у всех экземпляров переменных — называемых объектами — этого класса. Для практических целей применим это представление к целочисленным переменным. int — это имя класса, и любая переменная, определенная как целое число, является объектом.