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

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

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

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

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

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

Шилдт Г. Самоучитель С++ — Спб.: БВХ-Петербург, 2003. — 688 c.
ISBN 5-7791-0086-1
Скачать (прямая ссылка): samouchitelc2003.djvu
Предыдущая << 1 .. 76 77 78 79 80 81 < 82 > 83 84 85 86 87 88 .. 206 >> Следующая

ftinclude<iostream> ttinclude <cstring>
#include <cstdlib> using namespace std;
class strtype { char *p; int len; public:
strtype(char *ptr);
-strtype () (delete [] p; }
friend ostream &operator<< (ostream &stream, strtype &or);
);
strtype::strtype(char *ptr)
len = strlen(ptr) + 1; p - new char [len];
1
cout « "Ошибка вьщеления памяти\п"; exit(1);
strcpy (Р/ ptr) ;
// Здесь добавьте собственную функцию вывода
int main () і
strtype зі ("Это проверка"), s2(MMHe нравится C++,f); coat << si c< *\n' << s2;
return 0;
2. Замените в следующей программе функцию show() пользовательской функцией вывода:
tinclude <iostream> using namespace std;
class planet { protected:
double distance; // расстояние в милях от Солнца
Глава 8. Введение в систему ввода/вывода C++______________________________________265
int revolve; // полный оборот в днях
public:
planet {double d, int r) { distance = d; revolve = r; )
};
і
class earth: public planet {
double circumference; // окружность орбиты public:
earth(double d, int r) : planet {d, r) (
circumference = 2 * distance * 3.1416;
}
/*Перепишите функцию show() так, чтобы информация выводилась с помощью пользовательской функции вывода
*/
void shcur () {
cout << "Расстояние от Солнца: " « distance « т\пг;
cout « "Оборот вокруг Солнца: " « revolve « ’Хп1;
cout « "Окружность орбиты: м << circumference << 1 \п';
і
!
};
int main{)
{
earth ob(93000000, 365);
cout << ob; return 0;
3. Вспомните, почему пользовательская функция вывода не может быть функ-цией-членом.
8.6. Пользовательские функции ввода
Точно так же, как мы перегружали оператор вывода <<, можно перегрузить и оператор ввода >>. В C++ оператор ввода >> иногда называют оператором извлечения (extraction operator), а функцию, перегружающую этот оператор, — функцией извлечения (extractor). Смысл этих терминов в том, что при вводе информации мы извлекаем данные из потока. Во избежание путаницы мы будем называть функцию извлечения пользовательской функцией ввода.
Здесь показана основная форма пользовательской функции ввода:
istream ^operator» (istxeam fistream, имя_кяасса іойїект)
(
// тело пользовательской функции ввода
266
Самоучитель
C++
return stream;
Пользовательские функции ввода возвращают ссылку на поток istream, который является потоком ввода. Первый параметр тоже является ссылкой на поток ввода. Второй параметр — это ссылка на объект, получающий вводимую информацию.
Так же, как и пользовательская функция вывода, пользовательская функция ввода не может быть функцией-членом. Хотя внутри такой функции может быть выполнена любая операция, лучше ограничить ее работу вводом информации.
1. В этой программе к классу coord добавлена пользовательская функция ввода:
/ / Добавление дружественной функции ввода для объектов типа coord #include <iostream>
using namespace std;
class coord { int x, y; public:
coord О { x = 0; у = 0; }
coord(int і, int j) { x = і; у = j ; }
friend ostream &operator« (ostream Sstream, coord ob) ; friend istream &operator>>(istream Sstream, coord scb) ;
ostream ?operator« (ostream sstream, coord ob) t
stream « ob.x « ", u « ob.y « '\n'r-
return stream;
}
istream ^operator»(istream sstream, coord &ob) {
cout « "Введите координаты: ” ; stream » ob.x » ob.y; return stream;
int main()
coord a(l, l) , b(10, 23) ;
cout « a « b;
Глава 8. Введение в систему ввода/вывода C++ _ 267
сіп» а;
cout « а;
return 0;
}
Обратите внимание, как пользовательская функция ввода формирует строку-приглашение для ввода данных. Хотя во многих случаях этого не требуется (или даже это нежелательно), пользовательская функция ввода показывает, как в случае необходимости почти без усложнения программы можно выдать приглашающее сообщение.
2. Здесь создается класс inventory (инвентарь), в котором хранится название какого-то предмета, количество выданных на руки штук и стоимость одной штуки. В программу для этого класса включены пользовательские функции ввода и вывода.
#include <iostream>
# in с 1 ude < cstring > using namespace std;
class inventory {
char item[40]; // название предмета int onhand; // количество предметов на руках double cost; // цена предмета public:
inventory (char *i, int o, double c)
{
strcpy(item, i) ; onhand = o; cost = c;
}
friend ostream &operator<< (ostream stream, inventory ob) ; friend istream &operator>> (istream ^stream, inventory &ob} ;
Предыдущая << 1 .. 76 77 78 79 80 81 < 82 > 83 84 85 86 87 88 .. 206 >> Следующая