WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 |   ...   | 15 | 16 ||

} Те же самые замечания верны и для операции вставки. Она может быть построена аналогично. Единственное отличие заключается в том, что в нее нужно передать константную ссылку на объект типа Date, поскольку операция вставки не должна модифицировать выводимые объекты. Ниже приведена ее реализация для класса Date:

osiream& operator<<(ostream& os, const Date& txt){ os << txt.tm_date.tm_mday <<‘/’;

os << txt.tm_date.tin_mon << ‘/’;

os << txt.tm_date.tm_year;

return os;

} Следуя соглашениям о вводе-выводе для потоков, теперь можно осуществлять извлечение и вставку объектов класса Date следующим образом:

Date birthday(24,10,1985);

cout << birthday << ‘\n’;

или Date date;

cout << ”Пожалуйста, введите дату (день, месяц, год)\n”;

cin >> date;

cout << date << ‘\n’;

Приведем теперь пример полностью:

#include #include class Date { tm tm_date;

public:

Date(int d, int m, int y) { tm_date.tm_mday = d; tm_date.tm_mon = m; tm_date.tm_year = y;

};

Date (tm t){tm_date = t;};

Date() { tm_date.tm_mday = 01;

tm_date.tm_mon = 00;

tm_date.tm_year = 00; } friend ostream& operator<<(ostream& os, const Date& txt);

friend istream& operator>>(istream& is, Date& txt);

};

istream& operator>>(istream& is, Date& txt){ is >> txt.tm_date.tm_mday;

is >> txt.tm_date.tm_mon ;

is >> txt.tm_date.tm_year ;

return is;

} ostream& operator<<(ostream& os,const Date& txt){ os << txt.tm_date.tm_mon << '/' ;

os << txt.tm_date.tm_mday << '/' ;

os << txt. tm_date. tm_year ;

return os;

} void main(){ Date date;

cout << ”Пожалуйста, введите дату (день, месяц, год)\n”;

cin >> date;

cout << date << '\n';

} Приведем еще один пример, демонстрирующий перегрузку операций извлечения и вставки в поток, на этот раз для структуры:

struct info { char *name;

double val;

char *units;

info(){ val=0;

name = new char [30];

units = new char [30];

name[0]=units[0]=0;

}};

ostream& operator << (ostream& s, info &m){ // Вывод info в s s << m.name <<” ”<

return s;} Oперация >> может быть перегружена следующим образом:

istream& operator >> (istream& s, info &m){ // Ввод в info s.width(30); s >> m.name;

char c;

while((c = s.get())!= ‘ ‘ && c!=‘\t’ && c!=‘\n’);

s.putback(c);

s.width(30);

s >> m.val;

s.width(30);

s >> m.units;

return s;

} Для считывания строки ввода, такой как “Resistance 300 Ohm“, можно использовать следующую запись:

void main(){ clrscr();

info m;

cout<<”Введите наименование величины, ее значение \n”;

cout<<” и единицу измерения (и нажмите Enter.):\n”;

cin >> m; // Переопределенная операция >> cout << m; // Переопределенная операция << } При выполнении этой программы диалог на экране монитора может выглядеть следующим образом:

Введите наименование величины, ее значение и единицу измерения (и нажмите Enter.):

Resistance 300 Ohm Resistance 300 Ohm 27.11. Переадресация ввода-вывода Можно переназначить имена cin или cout файловым потокам.

Это позволяет легко проводить отладку ввода-вывода, переадресовывая ввод-вывод вместо файла на экран. Следующий пример демонстрирует эту возможность:

#include #include int main(int argc, char* argv[]){ char str[80];

// Создаем файловый поток:

ofstream ofs;

// Если в командной строке задан аргумент … cout << ”Введите имя и фамилию:\n”;

cin.getline(str, sizeof(str));

if (argc > 1){ // Открываем файл с заданным именем ofs.open(argv[1]);

// Если файл успешно открыт … if (ofs) // переадресовываем вывод cout = ofs;

} cout << ”Привет, ” << str << ’!’ << endl;

return 0;

} Если при запуске программы в командной строке задано имя файла, то вывод осуществляется в этот файл, в противном случае – на экран терминала.

Литература 1. Цимбал А.А., Майоров А.Г., Козодоев М.А. Турбо С++: язык и применение. – М.: "Джен АЙ Лтд", 1993. – 512 с.

2. С. Дьюхарст, К. Старк. Программирование на С++. – Киев:

НИПО "ДиаСофт", 1993. -272 с.

3. У. Сэвитч. С++ в примерах. – М.: ЭКОМ, 1997. – 736 с.

4. Р. Вайнер, Л. Пинсон. С++ изнутри. – Киев: НИПО "ДиаСофт", 1993. – 304 с.

5. Г. Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на С++.- М.: Издательство Бином, СПб: Невский диалект, 1998. – 560 с.

6. Климова Л.М. Основы практического программирования на языке С++. – М.: Приор, 1999. – 464 с.

7. Касаткин И.А. Профессиональное программирование на языке Си. тт. 1-3. – Минск: Вышэйшая школа, 1993.

8. Б. Керниган, Д. Ритчи. Язык программирования Си. – М.: ФИС, 1992. – 372 с.

9. П. Лукас. С++ под рукой. – Киев: ДиаСофт, 2003. – 480 с.

10. М. Уэйт, С. Прата, Д. Мартин. Язык Си. Руководство для начинающих. – М. Мир, 1988. – 318 с.

11. Ирэ Пол. ООП с использованием С++. – Киев: ДиаСофт, 1995, 1999. – 480 с.

12. Х.М. Дейтел., П.Дж.Дейтел. Как программировать на Си++. М.: ЗАО БИНОМ, 1999. – 1000 с.

13. У. Топп, У. Форд. Структуры данных в Си++. – М.: ЗАО БИНОМ, 1999. – 800 с.

14. Т. Сван. Освоение Borland C++ 4.5. Энциклопедия функций. – Киев: Диалектика, 1996. – 320с.

15. Т. Фейсон. Объектно-ориентированное программирование на Borland C++ 4.5. Киев: Диалектика, 1996.- 544 с.

16. Б. Карпов, Т. Баранова. С++: Специальный справочник. – СПб:

Питер, 2001. – 480 с.

Содержание 1. ВВЕДЕНИЕ 2. ЭЛЕМЕНТЫ ЯЗЫКА 2.1. Первые программы 2.2. Алфавит языка 2.3. Комментарии 2.4. Типы данных 2.5. Целые типы данных 2.6. Плавающие типы данных 2.7. Константы-строки, или литералы 2.8. Директива препроцессора define 2.9. Описания 2.10. Модификатор const 3. ВЫРАЖЕНИЯ 3.1. Операция и выражение присваивания 3.2. Арифметические операции 3.3. Операции отношения 3.4. Логические операции 3.5. Побитовые операции 3.6. Сдвиги 3.7. Операции автоувеличения и автоуменьшения ++ и – – 3.8. Тернарная или условная операция 3.9. Операция следования 3.10. Приоритеты операций и порядок вычисления 4. ОПЕРАТОРЫ 4.1. Пустой оператор 4.2. Оператор-выражение 4.3. Составной оператор 4.4. Объявления 4.5. Условный оператор 4.6. Оператор выбора switch 4.7. Оператор цикла while 4.8. Цикл с постусловием do-while 4.9. Оператор for 4.10. Оператор безусловного перехода 4.11. Оператор break 4.12. Оператор continue 4.13. Оператор return 5. УКАЗАТЕЛИ 5.1. Определение указателей 5.2. Указатели и массивы 5.3. Адресная арифметика 5.4. Символьные массивы и строки 5.5. Многомерные массивы 5.6. Указатели и многомерные массивы 6. ОПЕРАЦИЯ SIZEOF 7. ОПЕРАЦИИ ДЛЯ РАБОТЫ С ДИНАМИЧЕСКОЙ ПАМЯТЬЮ 7.1. Операция выделения памяти new 7.2. Операция освобождения памяти delete 8. ОБЪЯВЛЕНИЯ И ОПРЕДЕЛЕНИЯ 9. ОБЛАСТЬ СУЩЕСТВОВАНИЯ ИМЕНИ 9.1. Компиляция, компоновка, библиотеки 9.1.1. Компиляция и ее фазы 9.1.2. Модульное программирование, компоновка 9.2. Виды областей существования имени 10. ОБЛАСТЬ ВИДИМОСТИ 11. КЛАССЫ ПАМЯТИ 12. ОБЪЯВЛЕНИЯ ОБЪЕКТОВ И ТИПОВ 13. ИМЕНА ТИПОВ 14. СИНОНИМ ИМЕНИ ТИПА 15. ПРАВИЛА ПРЕОБРАЗОВАНИЯ СТАНДАРТНЫХ ТИПОВ 15.1. Явные преобразования 15.2. Неявные преобразования стандартных базовых типов 15.3. Преобразование производных стандартных типов 16. ФУНКЦИИ 16.1. Определение и вызов функции 16.2. Функции. Передача аргументов 16.3. Передача многомерных массивов 16.4. Указатели на функции 16.5. Ссылки 16.6. Ссылки в качестве параметров функций 16.7. Рекурсивные функции 16.8. Аргументы по умолчанию 16.9. Переопределение функций 16.10. Шаблоны функций 17. ПЕРЕЧИСЛЕНИЯ 18. КЛАССЫ 18.1. Объявление классов 18.2. Конструкторы 18.3. Деструкторы 18.4. Статические члены класса 18.5. Указатель this 18.6. Статические функции-члены 18.7. Указатели на члены класса 18.8. Инициализация данных–членов класса 18.9. Конструктор копирования и операция присваивания 18.10. Дружественные функции 18.11. Конструктор и операция new 18.12. Вызов деструктора 19. ПРОИЗВОДНЫЕ КЛАССЫ 19.1. Построение производного класса 19.2. Защищенные члены класса 19.3. Управление уровнем доступа к членам класса 19.4. Последовательность вызова конструктора и деструктора при построении производного класса на основе одного базового 19.5. Преобразования типов 20. ПОЛИМОРФИЗМ 20.1. Раннее и позднее связывание 20.2. Виртуальные функции 20.3. Абстрактные классы 21. ПЕРЕОПРЕДЕЛЕНИЕ СТАНДАРТНЫХ ОПЕРАЦИЙ 21.1. Основные определения и свойства 21.2. Операции new и delete при работе с абстрактными типами 21.3. Использование new при создании динамического объекта абстрактного типа 21.4. Операция delete 21.5. Преобразование типов 22. НЕКОТОРЫЕ ОСОБЕННОСТИ ПЕРЕОПРЕДЕЛЕННЫХ ОПЕРАЦИЙ 22.1. Операция = 22.2. Операция [ ] 23. КЛАССЫ И ШАБЛОНЫ 24. СПИСКИ 24.1. Операции над односвязными списками 24.2. Двунаправленные и кольцевые списки 24.3. Операции над кольцевыми списками 25. СТЕКИ 25.1. Реализация стека через массив 25.2. Реализация стека через динамическую цепочку звеньев 26. ДВОИЧНЫЕ ДЕРЕВЬЯ 26.1. Определение и построение 26.2. Таблицы 27. ПОТОКОВЫЙ ВВОД-ВЫВОД 27.1. Классы потоков 27.2. Стандартные потоки 27.3. Операции помещения и извлечения из потока 27.4. Форматирование потока 27.5. Файловый ввод-вывод с использованием потоков 27.6. Неформатируемый ввод-вывод 27.7. Часто применяемые функции 27.8. Файлы с произвольным доступом 27.9. Опрос и установка состояния потока 27.10. Перегрузка операций извлечения и вставки 27.11. Переадресация ввода-вывода ЛИТЕРАТУРА СОДЕРЖАНИЕ Валерий Израилевич Рейзлин ЯЗЫК C++ И ПРОГРАММИРОВАНИЕ НА НЁМ Учебное пособие Научный редактор доктор технических наук, профессор В.К. Погребной Редакторы: Н.Я. Горбунова Р.Д. Игнатова Подписано к печати 25.12.Формат 60х84/16. Бумага офсетная.

Плоская печать. Усл. печ. л. 10,41. Уч.- изд. л. 9,42.

Тираж 200 экз. 3аказ №. Цена С. 44.

ИПФ ТПУ. Лицензия ЛТ № 1 от 18.07.94.

Типография ТПУ. 634034, Томск, пр. Ленина, 30.

Pages:     | 1 |   ...   | 15 | 16 ||










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.