|
Программирование >> Инициализация объектов класса, структура
#include <iostream> #inc1ude String.h int main() { int aCnt = 0, eCnt = 0, iCnt = 0, oCnt = 0, uCnt = 0, theCnt = 0, itCnt = 0, wdCnt = 0, notVowel = 0; Слова The и It будем проверять с помощью operator==( const char* ) String but, the( the ), it( it ); operator>>( ostreams, Strings ) while ( cin >> buf ++wdCnt; operator<<( ostreams, const Strings ) cout << buf << ; if ( wdCnt % 12 == 0 ) cout << endl; String::operator==( const Strings ) and String::operator==( const char* ); if ( buf == the buf == The ) ++theCnt; else if ( buf == it buf == It ) ++itCnt; invokes String::s-ize() for ( int ix =0; ix < buf.sizeO; ++ix ) invokes String:: operator [] (int) switch( buf[ ix ] ) case a: case A: ++aCnt; break; case e: case E: ++eCnt; break; case i: case I: ++iCnt; break; case o: case 0: ++oCnt; break; case u: case U: ++uCnt; break; default: ++notVowe1; break; operator<<( ostreams, const Strings ) cout << \n\n << Слов: << wdCnt << \n\n << the/The: << theCnt << \n\n a: << aCnt << \n it/It: << itCnt << \n\n согласн: < <notVowel << << eCnt << \n << ICnt << \n << oCnt << \n << uCnt << endl; Протестируем программу: предложим ей абзац из детского рассказа, написанного одним из авторов этой книги (мы еще встретимся с этим рассказом в главе 6). Вот результат работы программы: Alice Ema has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, 1ike a fiery bird in flight. A beautiful fiery bird, he tells her, magical but untamed. Daddy, shush, there is no such thing, she tells him, at the same time wanting him to tell her more. Shyly, she asks, I mean, Daddy, is there? Слов: 65 the/The: 2 it/It: 1 согласных: 190 e: 30 i: 24 о: 10 u: 7 Упражнение 3.26 В наших реализациях конструкторов и операций присваивания содержится много повторов. Попробуйте вынести повторяющийся код в отдельную закрытую функцию-член, как это было сделано в разделе 2.3. Убедитесь, что новый вариант работоспособен. Упражнение 3.27 Модифицируйте тестовую программу так, чтобы она подсчитывала и согласные b, d, f, s, t. Упражнение 3.28 Напишите функцию-член, подсчитывающую количество вхождений символа в строку class String { public: ... int count( char ch ) const; ... String, используя следующее объявление: Упражнение 3.29 Реализуйте оператор конкатенации строк (+) так, чтобы он конкатенировал две строки и class String { public: ... String operator+( const String srhs ) const; ... возвращал результат в новом объекте String. Вот объявление функции: 4. Выражения В главе 3 мы рассмотрели типы данных - как встроенные, так и предоставленные стандартной библиотекой. Здесь мы разберем предопределенные операции, такие, как сложение, вычитание, сравнение и т. п., рассмотрим их приоритеты. Скажем, результатом выражения 3+4*5 является 23, а не 35 потому, что операция умножения (*) имеет более высокий приоритет, чем операция сложения (+). Кроме того, мы обсудим вопросы преобразований типов данных - и явных, и неявных. Например, в выражении 3+0.7 целое значение 3 станет вещественным перед выполнением операции сложения. 4.1. Что такое выражение? Выражение состоит из одного или более операндов, в простейшем случае - из одного литерала или объекта. Результатом такого выражения является г-значение его операнда. void mumble() { 3.14159; melancholia ; upperBound; Например: Результатом вычисления выражения 3.14159 станет 3.14159 типа double, выражения melancholia - адрес первого элемента строки типа const char*. Значение выражения upperBound - это значение объекта upperBound, а его типом будет тип самого объекта. Более общим случаем выражения является один или более операндов и некоторая salary + raise ivec[ size/2 ] * delta операция, применяемая к ним: first name + + 1ast name Операции обозначаются соответствующими знаками. В первом примере сложение применяется к salary и raise. Во втором выражении size делится на 2. Частное используется как индекс для массива ivec. Получившийся в результате операции взятия индекса элемент массива умножается на delta. В третьем примере два строковых объекта конкатенируются между собой и со строковым литералом, создавая новый строковый объект. Операции, применяем1е к одному операнду, называются унарными (например, взятие адреса (s) и разыменование (*)), а применяемые к двум операндам - бинарными. Один и
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |