Стенли Липпман - Язык программирования C++. Пятое издание
- Название:Язык программирования C++. Пятое издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2014
- Город:Москва
- ISBN:978-5-8459-1839-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com
Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Инициализация строки по умолчанию (см. раздел 2.2.1) создает пустую строку; т.е. объект класса string
без символов. Когда предоставляется строковый литерал (см. раздел 2.1.3), во вновь созданную строку копируются символы этого литерала, исключая завершающий нулевой символ. При предоставлении количества и символа строка содержит указанное количество экземпляров данного символа.
Таблица 3.1. Способы инициализации объекта класса string
string s1 |
Инициализация по умолчанию; s1 — пустая строка |
string s2(s1) |
s2 — копия s1 |
string s2 = s1 |
Эквивалент s2(s1) , s2 — копия s1 |
string s3("value") |
s3 — копия строкового литерала, нулевой символ не включен |
string s3 = "value" |
Эквивалент s3("value") , s3 — копия строкового литерала |
string s4(n, 'c') |
Инициализация переменной s4 символом 'c' в количестве n штук |
В разделе 2.2.1 упоминалось, что язык С++ поддерживает несколько разных форм инициализации. Давайте на примере класса string
начнем изучать, чем эти формы отличаются друг от друга. Когда переменная инициализируется с использованием знака =
, компилятор просят скопировать инициализирующий объект в создаваемый объект, т.е. выполнить инициализацию копией (copy initialization). В противном случае без знака =
осуществляется прямая инициализация (direct initialization).
Когда имеется одиночный инициализатор, можно использовать и прямую форму, и инициализацию копией. Но при инициализации переменной несколькими значениями, как при инициализации переменной s4
выше, следует использовать прямую форму инициализации.
string s5 = "hiya"; // инициализация копией
string s6("hiya"); // прямая инициализация
string s7(10, 'c'); // прямая инициализация; s7 - сссссссссс
Если необходимо использовать несколько значений, можно применить косвенную форму инициализации копией при явном создании временного объекта для копирования.
string s8 = string(10, 'c'); // инициализация копией; s8 - сссссссссс
Инициализатор строки s8
— string(10, 'c')
— создает строку заданного размера, заполненную указанным символьным значением, а затем копирует ее в строку s8
. Это эквивалентно следующему коду:
string temp(10, 'c'); // temp - сссссссссс
string s8 = temp; // копировать temp в s8
Хотя используемый для инициализации строки s8
код вполне допустим, он менее читабелен и не имеет никаких преимуществ перед способом, которым была инициализирована переменная s7
.
3.2.2. Операции со строками
Наряду с определением способов создания и инициализации объектов класс определяет также операции, которые можно выполнять с объектами класса. Класс может определить обладающие именем операции, такие как функция isbn()
класса Sales_item
(см. раздел 1.5.2). Класс также может определить то, что означают различные символы операторов, такие как <<
или +
, когда они применяются к объектам класса. Наиболее распространенные операции класса string
приведены в табл. 3.2.
Таблица 3.2. Операции класса string
os << s |
Выводит строку s в поток вывода os . Возвращает поток os |
is >> s |
Читает разделенную пробелами строку s из потока is . Возвращает поток is |
getline(is, s) |
Читает строку ввода из потока is в переменную s . Возвращает поток is |
s.empty() |
Возвращает значение true , если строка s пуста. В противном случае возвращает значение false |
s.size() |
Возвращает количество символов в строке s |
s[n] |
Возвращает ссылку на символ в позиции n строки s ; позиции отсчитываются от 0 |
s1 + s2 |
Возвращает строку, состоящую из содержимого строк s1 и s2 |
s1 = s2 |
Заменяет символы строки s1 копией содержимого строки s2 |
s1 == s2 s1 != s2 |
Строки s1 и s2 равны, если содержат одинаковые символы. Регистр символов учитывается |
< , <= , > , >= |
Сравнение зависит от регистра и полагается на алфавитный порядок символов |
Как уже упоминалось в главе 1, для чтения и записи значений встроенных типов, таких как int
, double
и т.д., используется библиотека iostream
. Для чтения и записи строк используются те же операторы ввода и вывода.
// Обратите внимание: перед компиляцией этот код следует дополнить
// директивами #include и объявлениями using
int main() {
string s; // пустая строка
cin >> s; // чтение разделяемой пробелами строки в s
cout << s << endl; // запись s в поток вывода
return 0;
}
Программа начинается с определения пустой строки по имени s
. Следующая строка читает данные со стандартного устройства ввода и сохраняет их в переменной s
. Оператор ввода строк читает и отбрасывает все предваряющие непечатаемые символы (например, пробелы, символы новой строки и табуляции). Затем он читает значащие символы, пока не встретится следующий непечатаемый символ.
Таким образом, если ввести " Hello World!"
(обратите внимание на предваряющие и завершающие пробелы), фактически будет получено значение "Hello"
без пробелов.
Подобно операторам ввода и вывода встроенных типов, операторы строк возвращают как результат свой левый операнд. Таким образом, операторы чтения или записи можно объединять в цепочки.
string s1, s2;
cin >> s1 >> s2; // сначала прочитать в переменную s1,
// а затем в переменную s2
cout << s1 << s2 << endl; // отобразить обе строки
Если в этой версии программы осуществить предыдущий ввод, " Hello World!"
, выводом будет "HelloWorld!"
.
В разделе 1.4.3 уже рассматривалась программа, читающая неопределенное количество значений типа int
. Напишем подобную программу, но читающую строки.
int main() {
string word;
while (cin >> word) // читать до конца файла
cout << word << endl; // отобразить каждое слово с новой строки
return 0;
}
Здесь чтение осуществляется в переменную типа string
, а не int
. Условие оператора while
, напротив, выполняется так же, как в предыдущей программе. Условие проверяет поток после завершения чтения. Если поток допустим, т.е. не встретился символ конца файла или недопустимое значение, выполняется тело цикла while
. Оно выводит прочитанное значение на стандартное устройство вывода. Как только встречается конец файла (или недопустимый ввод), цикл while
завершается.
Интервал:
Закладка: