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

 

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

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

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


Копирование строк более простым способом

Конечно, вам не обязательно использовать цикл for для копирования строк. Как вы могли догадаться, для этого существует библиотечная функция. Приведем измененную версию предыдущей программы, STRC0PY2, которая использует функцию strcpy().

// strcopy2.cpp

// копирование строки функцией strcpy ( )

!include <iostream>

!include <cstring>

using namespace std:

///////////////////////////////////////////////////////////

int main ( ) {

char strl [ ] ¦= "Уронили мишку на пол. оторвали мишке лапу!": const int МАХ = 80: // максимальная длина строки Массивы строк 291

char str2 [ MAX ]: // сама строка strcpy( str2. strl ); // копируем строку cout « str2 « endl: // и показываем результат return 0:

}

Заметим, что первым аргументом этой функции является строка, куда будут копироваться данные:

strcpy ( destination, source ):

Порядок записи справа налево напоминает формат обыкновенного присваивания: переменная справа копируется в переменную слева.

Массивы строк

Если возможно существование массива массивов, значит возможен и массив строк. На самом деле это довольно полезная конструкция. Рассмотрим пример STRARAY, в котором названия дней недели помещаются в массив:

// straray.cpp // массив строк !include <iostream> using namespace std: ///////////////////////////////////////////////////////////

int main ( ) {

const int DAYS =1\П количество строк в массиве const int MAX = 12: // максимальная длина каждой из них

// массив строк

char star [ DAYS ][ MAX ] = {

"Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"

}:

// вывод всех строк на экран for ( int j = 0: j < DAYS: j++ ) cout « star [ j ] « endl;

return 0:

}

Программа печатает все строки массива:

Понедельник

Вторник

Среда

Четверг

Пятница

Суббота

Воскресенье 292

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

Так как строки — это массивы, то будет верным утверждение, что star — массив строк — в действительности является двумерным массивом. Его первая размерность, DAYS, определяет, сколько строк в массиве. Вторая размерность, МАХ, определяет максимальную длину строк (11 символов для строки «воскресенье» плюс 12-й завершающий нулевой символ). На рисунке 7.10 показано, как это выглядит.

Заметим, что некоторое количество памяти не будет использоваться в случае, когда строка меньше максимальной длины. Мы объясним, как избежать этого недостатка, когда будем говорить об указателях.

10

0 1

3 4

8 9

S U n d a У 0
M 0 n d a У 0
T U e S d a У 0
W e d n e S d a У 0
T h U r S d a У 0
F r і d a У 0
S a t U r d a У 0

Sta г[0] star[1] sta г[2] sta г[3] sta г[4] star[5] sta г[6]

Рис. 7.10. Массив строк

Синтаксис для доступа к одной из строк массива может выглядеть немного неожиданно:

star [ j ]:

Если мы работаем с двумерным массивом, то где тогда второй индекс? Так как двумерный массив — это массив массивов, то мы можем получить доступ к элементам «внешнего» массива, каждый из которых в отдельности является массивом (в нашем случае строкой). Для того чтобы сделать это, нам не нужен второй индекс. Поэтому star[j] — это строка под номером j из массива строк.

Строки как члены классов

Строки часто используют в качестве членов классов. В следующем примере, вариации программы 0BJPART из главы 6, используются строки, содержащие названия частей изделий.

// strpart.срр

// использование строк в классе !include <iostream> !include <cstring> using namespace std;

Iimilllllllllllllllllllllllllllllllllllllllllllllllllllll

class part { Массивы строк 293

private:

char partname [ ЗО ]: // название int partnumber; // номер

double cost: 11 цена

public:

void setpart ( char pname [ ]. int pn. double с ) {

strcpy ( partname. pname ): partnumber = pn: const = c:

}

void showpart ( ) {

cout « "ХпНазвание=" « partname; cout « ". номер=" « partnumber: cout « ". цена=$" « const;

1

}:

///////////////////////////////////////////////////////////

int main ( ) {

part parti. part2;

parti.setpart ( "муфта". 4473. 217.55 ): part2.setpart ( "вороток". 9924. 419.25 ): cout « "ХпПервая деталь: "; parti.showpart ( ); cout « "ХпВторая деталь: ": part2.showpart ( ); cout « endl:

return 0:

}

В этой программе определены два объекта класса part, и им присвоены значения в методе setpart(). Затем программа выводит эти объекты, используя метод showpart(). Приведем вывод:

Первая деталь:

Название=муфта. номер=4473, цена=$217.55 Вторая деталь:

Название=вороток. номер=9924. цена=$419.25

Чтобы уменьшить размер программы, мы удалили номер модели из переменных класса.

В методе setpart() мы используем библиотечную функцию StrcpyO Для копирования строки из аргумента pname в переменную класса partname. Таким образом, этот метод служит для строковой переменной для тех же целей, что и операция присваивания для простых переменных. (Похожая функция strncpy() принимает еще третий аргумент, определяющий максимальное количество символов, которое может быть скопировано. Так можно предупредить переполнение массива.)
Предыдущая << 1 .. 104 105 106 107 108 109 < 110 > 111 112 113 114 115 116 .. 341 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100