Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Лафоре Р. -> "Объектно-ориентированное программирование в С++" -> 112

Объектно-ориентированное программирование в С++ - Лафоре Р.

Лафоре Р. Объектно-ориентированное программирование в С++ — М.: Питер, 2004. — 992 c.
Скачать (прямая ссылка): obektnoorentprogramm2004.djvu
Предыдущая << 1 .. 106 107 108 109 110 111 < 112 > 113 114 115 116 117 118 .. 341 >> Следующая


s2=C новым счастьем!

s3= - сейчас строка пуста

s3=C Новым годом! - аналог si

s3=C Новым годом! С новым счастьем! - после добавления s2

Если длина двух строк, объединенных методом concat(), превысит максимальную длину строки для объекта String, то объединение не будет выполнено, а пользователь получит сообщение об ошибке.

Мы рассмотрели простой строковый класс. Теперь мы рассмотрим более сложную версию того же класса.

Стандартный класс string языка С++

Стандартный язык С++ включает в себя новый класс, называемый string. Этот класс во многом улучшает традиционный строковый тип. Например, вам не нужно заботиться о создании массива нужного размера для содержания строковых переменных. Класс string берет на себя всю ответственность за управление памятью. Кроме того, этот класс позволяет использовать перегруженные операции, поэтому вы можете объединять строковые объекты, используя операцию +:

S3 - Sl + S2:

Есть и другая выгода. Этот класс более эффективен и безопасен в использовании, чем строковый тип. Во многих ситуациях предпочтительнее использование класса. (Однако, как мы заметили ранее, существует и много ситуаций, в которых должен быть использован строковый тип.) В этом разделе мы рассмотрим класс string и его различные операции и методы.

Определение объектов класса string и присваивание им значений

Вы можете определить объект класса string различными способами: использовать конструктор без аргументов, создающий пустую строку, конструктор с одним аргументом, где аргумент является строковой константой, то есть символы ограничены двойными кавычками. Как и в написанном нами классе String, объекты класса string могут быть присвоены один другому при использовании простой операции присваивания. В примере SSTRASS показано, как это выглядит. Массивы строк 297

// sstrass.cpp

// определение и присвоение для строк !include <iostream> !include <string> using namespace std: ///////////////////////////////////////////////////////////

int main ( ) {

string si ( "Рыба" ): string s2 = "Мясо": string s3:

s3 = si:

cout « "s3 = " « s3 « endl:

s3 = "Ни " + si + " ни ": s3 += s2:

cout « "s3 = " « s3 « endl; si.swap ( s2 );

cout « si <c " не " « s2 « endl: return 0:

}

Здесь в первых трех строках кода показаны три способа определения объекта класса string. Первые два инициализируют строки, последний создает пустую переменную класса string. В следующей строке показано простое присваивание с использованием операции =.

Класс string использует перегруженные операции. Мы не будем изучать внутреннюю работу перегруженных операций до следующей главы, но можем использовать эти операции и без знания того, как они сконструированы.

Перегруженная операция + объединяет один строковый объект с другим. В строке

s3 = "Ни " + Sl + " ни ":

строка «Ни» помещается в переменную S3.

Вы можете также использовать операцию += для добавления строки в конец существующей строки. В строке

S3 +- S2;

переменная s2, имеющая значение «Мясо», добавляется в конец строки s3. Получившаяся при этом строка «Ни Мясо» присваивается переменной s3.

В этом примере нам встретится первый метод класса string — swap(), который меняет местами значения двух строковых объектов. Он вызывается для одного объекта, в то время как другой объект является его аргументом. Мы применили этот метод к объектам si («Рыба») и s2 («Мясо»), а затем вывели значения этих объектов для того, чтобы показать, что si теперь имеет значение «Мясо», a s2 имеет значение «Рыба». Вот результат работы программы SSTRASS:

S3 - Рыба

S3 - Ни Рыба ни Мясо Мясо не Рыба 298

Глава 7. Массивы и строки

Ввод/вывод для объектов класса string

Ввод и вывод осуществляются путем, схожим с применяемым для строкового типа. Операции « и » перегружены для использования с объектами класса string, метод getline() принимает ввод, который может содержать пробелы или несколько строк. В примере SSTRIO показано, как это выглядит.

// sstrio.cpp

// ввод/вывод для класса string !include <iostream> !include <string> using namespace std: ///////////////////////////////////////////////////////////

int main ( ) {

string full_name. nickname, address; string greeting ( "Здравствуйте. " );

cout « "Введите Ваше имя: ":

getline ( ein. full_name ):

cout « "Ваше имя: " « fulljiame « endl;

cout « "Введите Ваш псевдоним: "; ein » nickname:

greeting += nickname; cout « greeting « endl;

cout « "Введите Ваш адрес в несколько строк\п": cout « "Окончание ввода символ '$'\п"; getline (ein. address. '$' ): cout « "Ваш адрес: " « address « endl;

return 0:

}

Программа считывает имя пользователя, которое, возможно, содержит внутренние пробелы, используя метод getline(). Эта функция похожа на метод get(), используемый для строкового типа, но это не метод класса. Ее первым аргументом является потоковый объект, из которого будет приниматься ввод (здесь это сіп), а второй аргумент — это объект класса string, куда будет помещен текст. Переменная fulLname будет затем выведена, используя cout и операцию «.
Предыдущая << 1 .. 106 107 108 109 110 111 < 112 > 113 114 115 116 117 118 .. 341 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100