>
Если необходимо использовать несколько значений, можно применить косвенную форму инициализации копией при явном создании временного объекта для копирования.
>string s8 = string(10, 'c'); // инициализация копией; s8 - сссссссссс
Инициализатор строки >s8
— >string(10, 'c')
— создает строку заданного размера, заполненную указанным символьным значением, а затем копирует ее в строку >s8
. Это эквивалентно следующему коду:
>string temp(10, 'c'); // temp - сссссссссс
>string s8 = temp; // копировать temp в s8
Хотя используемый для инициализации строки >s8
код вполне допустим, он менее читабелен и не имеет никаких преимуществ перед способом, которым была инициализирована переменная >s7
.
Наряду с определением способов создания и инициализации объектов класс определяет также операции, которые можно выполнять с объектами класса. Класс может определить обладающие именем операции, такие как функция >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"
без пробелов.