|
Программирование >> Унарные и бинарные операторы
ПЛОТНО и кодируются числами от 97 (а) до 122 (z). Eиc нам понадобится апос гроф ( ), который тоже нужно считать буквой, потому что он имеется во многих английских словах. Еще, пожалуй, для составления словаря т1ужно привести все слова к одному виду, то есгь превратить все строчные буквы в прописные, и, поскольку буквы (прописные и строчные) идут подряд, к числу, которым колируется прописная буква, достаточно прибавить одно число (легко понять, ч го оно равно 32). Итак, функция isletterO готова (листинг 6.4). Листинг 6.4 bool isletter(char 8iC){ if(c=-39) return true: if(c >=65 && с <=90) { c+=32: return true; if (c>=97 && c<-122) return true; return false; Задача 6.2. Соберите все части программы подготовки словаря. Сделайте так, чтобы имя обрабатываемого файла задавалось в командной строке. Создайте словарь Диккенса, Шекспира, Льюиса Кэррола. Задача 6.3. Функция GetWordO возвращает true, только когда полученная строка не пуста. Но может случиться так, что в файле вообще пе окажется слов. В этом случае GetWordC) не возвратит ничего. Как исправить эту ошибку? Задача 6.4. Подумайте, как определить и храпит)> в словаре частоту появления каждого слова. В этой суетливой главе пом приходилось иачитть работу, бросать ее на полпути, отвлекаться, думать, откладывать что-то на потом, исправлять ошибки и ства думать. Это утомгтелыю, но mteuno таково программирование, да и любая другая сложная работа. ГЛАВА 7 Я и мир объектов Часы 125 Часы До сих пор мы пользовались готовыми объектами из стандартной библиотеки С++. Они уже помогли нам искать анаграммы (см. раздел Анаграммы главы 4) и составлять словари (см. главу 6). Нет сомнений, что с их номоп;ью можно решить много других распространенных задач. Но даже самый лучпшй набор готовых объектов нельзя применить ко всем задачам, рано или поздно придется создавать объекты самому. Нашим первым объектом будут часы. Конечно, не обычные часы, которые можно положить в карман или носить на руке, а некий объект, показывающий время на экране монитора. В С++ для создания объектов служат объявления. Например, инструкция int sec создает объект sec тина i nt. Компилятору не нужно рассказывать, что такое i nt, встретив объявление int sec, он уже знает, какие операции возможны с целочисленной переменной и сколько она занимает памяти. Но если объявляется новый объект, например mycl оск watch, компилятор должен знать, что такое тусЬск , сколько памяти отвести для объекта watch и как к нему подступиться , какие у него параметры, собственные функции и операторы. Все это компилятор узнает из описания объекта, которое начинается ключевым словом с1 ass. Согласно традиции языка С++, описания новых объектов, так же как и описания стандартных, лучше хранить в отдельных файлах с расширением .h. В листинге 7.1 показано содержимое файла myclock.h, хранящего описание объектов типа mycl оск. Листинг 7.1 using namespace std: class myclock{ public: void dispO: void clockset(int h.int m.int s){ hour=h: min=: sec=s: void tickOf if(sec - 59){ sec=0: min++: else sec++: if(min =- 60){ m1n=0: hour++: private: void sw(){ cout.fillCO): cout.width(2): } int hour; int min: int sec: void myclock;:disp(){ swO; cout hour: cout :: swO: cout rain: cout :; sw(): cout sec: cout \r: Как видим, описание объектов типа rayclock начинается словом с1 ass, далее идут фигурные скобки (в них-то и содержится описание) и точка с запятой. Внутри фигурных скобок выделены две области, идентифицируемые словами private (тайный) и public (открытый): class { public: private: В области private описана сердцевина будущего объекта, все, что у него есть самого дорогого, то, к чему внепи!ий мир не имеет непосредственного доступа. Если искать этому аналогию в ре;ип>ном мире, то область private похожа на внутренности телевизора и доступна только специалистам. Без области private само понятие объекта теряет смысл, ведь если ко всему в объекте можно получить доступ извне, то теряется его обособленность, он сливается с основной ирограммо!!. В области public описан как бы пульт управления объектом, 1 о есть его собственные фун кции, с п()мон1ьк) которых можно получить доступ к области private, узнать или задать состояние объекта, заставить его выполнить какие-то действия. Область риЫ i с - это посредник между объектом и вненпшм миром. И конечно, она должна быть спроектирована так, чтобы эф<}5ектпвпо управлять объектом, пе нарушая его целостности (примерно как пульт управления телевизором). Описание объекта, показанное в листинге 7.1, хранит в области private функцию swO, помогающую правильно отобразить время, а также переменные hour (час), min (минута), sec (секунда). В открытой области будущего объекта видны три его собственные функции: Ч- void disp() - показывает время; К voidclockset(inth.7ntm.ints) - устанавливает время; ¥ void tickO - переводит часы на секунду вперед. Функция .sw() нужна для того, чтобы всегда выводить на экран 01, а не 1. В ней нснользуются две собственные функции объекта cout: cout.\vidth(2) задает ширину начя вывода (у нас - два символа), а tout.fill(O) - символ, которым заполняются оставшиеся слева )юля (в iiauicM случае - 0). Заметим, что внутри объекта функция может быть только объявлена (пример - void di sp():), а может быть полностью описана (например, void tick()). Если функция только объявлена, то ее тело располагается вне описания объекта и, чтобы стало ясно, что функция живет не сама по себе, а принадлежит объекту определенного типа, ее имя помечается названием unia и двумя двоеточиями: void myclock::disp(){ Задача7.1. ФункцияtickO влистинге7.1 содержит ои1ибку. Когда она проявится? 11апишите правильную функцию tickO. Имея описание, можно создать сам объект - примерно так, как это делает нрограм.ма из листинга 7.2. Листинг 7.2 #include <iostream> #include myclock.h using namespace std; int mainOj myclock a: a.clockset(10.59.30): for(int i=0: i<10GG: i++){ a.tickO; a.dispO; Описание объектов типа myclock находится в файле myclock.h (см. листинг 7.1) и включается в текст нашей программы директивой #include myclock.h . Обратите внимание, название файла myclock.h обрамляется пе угловыми скобками <>, а двойными кавычками, показывая, что включаемый файл создан профаммистом, а не принадлежит компилятору. - Созданный нами объект объявляется в строке: myclock а:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |