Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Самоучитель С++ - Шилдт Г.

Шилдт Г. Самоучитель С++ — Спб.: БВХ-Петербург, 2003. — 688 c.
ISBN 5-7791-0086-1
Скачать (прямая ссылка): samouchitelc2003.djvu
Предыдущая << 1 .. 183 184 185 186 187 188 < 189 > 190 191 192 193 194 195 .. 206 >> Следующая

5. Пропущено слово "производного".
6. Нет.
Упражнения
13.1
1. /* Программа превращения пробелов в вертикальные линии |
без использования инструкции "using namespace std"
*/
ttinclude <iostream>
#include <fstream>
int main(int argc, char *argv[]) t
if(argc1=3} {
std::cout « "Преобразование <файл_ввода> <файл_вывода>\п";
return 1;
1
Г
std::ifstream fin(argv[1]); // открытие файла для ввода
std::ofstream fout(argv[2]); // создание файла для вывода
if(!fout) {
std::cout « "Файл открыть невозможноХп" ; return 1;
if(!fin) {
std::cout << "Файл открыть невозможно\пи;
return 1;
}
char ch;
fin.unsetf (std: : ios: : skipws) ; // не пропускать щюбелы while(!fin,eof ()) {
f in »ch ;
if (ch-,1)ch= 'Iі; if(Іfin.eof()) fout << ch;
}
fin.close(); fout.close();
return 0;
}
Приложение В. Ответы на вопросы и решения упражнений_
.643
2. Безымянное пространство имен ограничивает область видимости идентификаторов тем файлом, в котором они объявлены.
3. Представленная ниже форма инструкции using вводит в текущее пространство имен только указанный в инструкции член:
using имя_прострляствл: : член;
Следующая форма инструкции using делает видимым все пространство имен: using namespace имя_пространства;
4. Поскольку вся стандартная библиотека C++, включая потоки сіп и cout, объявлена в пространстве имен std, для совместимости большинство программ нужно вводить в пространство имен std. Это дает возможность использовать в программах имена стандартной библиотеки C++ непосредственно, без уточнения, к какому пространству имен они принадлежат. Для большинства программ альтернативой была бы необходимость задания всех ссылок на имена стандартной библиотеки с инструкцией std::. Другой альтернативой являются инструкции using только для потоков, т. е. using std::cin и using std::cout.
5. Размещая код библиотеки в собственном пространстве имен, вы снижаете вероятность возникновения конфликтов имен.
13.2
1. // Преобразование строки в целое
#include <iostream>
#include <cstring> using namespace std;
class strtype { char str [80]; int len; public:
strtype(char *s) { strcpy(str, s)г len = strlen(s); }
operator char *() ( return str; }
operator int() ( return len; }
^;
int main ()
Г
strtype s("Функции преобразования весьма удобны"); char *р; int 1 ;
1 = s; // преобразование строки s в целое — длину строки р — s; // преобразование строки s
644
Самоучитель C++
// в char * — указатель на строку cout << "Строка: \п";
cout << р << "\пимеет длину " << 1 << 11 Символов. \п,г ;
return 0;
J
2. ^include <iostream>
using namespace std;
int p(int baser int exp) ;
class pwr ( int base; int exp; public:
pwr (intb, int e) { base = b; exp = e; } operator int() f return p(base, exp); }
// Возвращает основание base в степени exp int p(int base, int exp)
{
int temp;
for (temp=l; exp; exp--) temp = temp * base; return temp;
int main()
{
pwr ol(2, 3), o2(3, 3) ;
int result;
result = ol;
cout << result << '\nf;
result = o2;
cout << result « T\nr;
// объекты можно указывать непосредственно в инструкции cout, // как это сделано здесь cout « ol + 100 « 1 \nr;
return 0;
}
13.3
1. // Пример разделения ресурса с трассировкой работы
#include <iostream>
Приложение Ответы НЗ вопросы и решения упражнений _ 645
#include <cstring> using namespace std;
class output {
static char outbuf [255] ; // это разделяемый ресурс
static int inuse; // если переменная inuse равна О,
// буфер доступен; иначе он занят static int oindex; // индекс буфера char str 180] ;
int і; // индекс сле^ющего символа в str
int who; // идентификатор объекта, должен быть положительным public :
output{int w, char *s) ( strcpy(str, s) ; і = 0; who = w; }
/* Эта функция возвращает -1 при ожидании освобождения буфера, она возвращает 0 при завершении вывода, и она возвращает who, если буфер все еще используется */
intputbuf { )
{
if(istr[i]) { // вывод закончен
inuse =0; // освобождение буфера
return 0; // сигнал завершения
}
if (!inuse) inuse = who; // захват буфера if (inuse ! = who) (
cout « "Процесс" << who << "сейчас блокирован\nlf; return -1; // буфер использует кто-то еще
}
if (str [і]) { // символы все еще выводятся
outbuf [oindex] = str[і3;
cout « "Процесс " << who << n выводит символы\п"; і+-Ь; oindex++;
Предыдущая << 1 .. 183 184 185 186 187 188 < 189 > 190 191 192 193 194 195 .. 206 >> Следующая