Инициализация наследуемых классов.

Все действия по инициализации объектов выполняет конструктор порождённого класса.

Если конструктору базового класса требуются аргументы, то они должны быть указаны в списке аргументов конструктора. В общем виде конструктор имеет вид:

Конструктор_производного_класса(список аргументов): базовый_класс1( список аргументов)…базовый_класс_N (список аргументов) { тело конструктора}

Производный класс может иметь не один , а несколько базовых. В этом случае базовые классы указываются списком, через ,.


#include <iostream.h>

Class B1

{ public:

B1(){cout<<"работа конструктора B1\n";}

~B1(){cout<<" работа деструктора B1\n";}

};

Class B2

{ public:

B2(){cout<<"работа конструктора B2\n";}

~B2(){cout<<" работа деструктора B2\n";}

};

class D:public B1,public B2

{

public:

D(){cout<<"работа конструктора D\n";}

~D(){cout<<" работа деструктора D\n";}

};

Void main(void)

{

cout <<"результат работы программы: \n" ;

D ob;

cout<<"*********************\n" ;

}

результат работы программы:

Работа конструктора B1

Работа конструктора B2

Работа конструктора D

*********************

Работа деструктора D

Работа деструктора B2

Работа деструктора B1


Конструкторы базового класса должны быть объявлены с атрибутами protected или publicдля того, чтобы обеспечить возможность их вызова из класса-наследника.

Потоки.

Классы ввода-вывода iostream рассматривают информацию, как побитовый поток данных. Если данные выводятся на экран или заносятся в файл, то источник их как правила находится в программе. Если поток направлен в противоположную сторону, то данные могут поступать либо с клавиатуры или из файла, В этом случае они заносятся в переменные.

Операция записи на диск достаточно временноёмка, поэтому используют буфер обмена.

В С++ используется ОО подход к реализации обмена данными с буферными потоками.

§ Класс streambuf управляет буфером, его методы позволяют наполнить, опорожнить и очистить буфер.

§ Класс ios является базовым для классов ввода-вывода.

§ Классы istream и ostream являются произвольными от класса ios и отвечают соответственно за потоковый ввод и вывод данных.

§ Класс iosteam является произвольным от istream и ostream и обеспечивает методы ввода-вывода для печати на экран.

§ Классы fstream используются для ввода-вывода из файла.

В файле iostream.h определены классы iostream и ostream, именно то, что эти операторы ввода-вывода работают с классами, позволяет перегружать их для работы с классами пользователя. Оператор cin является глобальным объектом и перегружается таким образом, что можно вводить различные типы данных.

В частности при помощи этого объекта модно ввести тип *char, то есть строку символов. Можно использовать дополнительные методы этого класса, что бы более полно контролировать ввод-вывод. Пример : ввод одного символа можно реализовать при помощи метода cin.get()>>


#include <iostream.h>

#include <math.h>

Int main(void)

{

Char ch;

while((ch=cin.get())!=EOF)

{

cout << "ch: "<<ch<<endl;

}

cout <<"\n конец \n";

Return 0;

} //ввод EOF — Ctrl+Z


cin.get() возвращает не объект типа iostream, а тип int. А если вы используете параметр cin.get(a), то возвращается объект iostream, а параметру присваивается значение из потока. Для работы со строками подойдёт как оператор ввода <<, так и методы get() и getline(). Для ввода строки можно использовать get() и getline() с тремя параметрами:

§ указатель на массив символов.

§ максимально-возможное количество символов в строке, включая концевой символ;

§ разделитель строк.

Cin.get(str,80,”\n”);

Разница между этими двумя функциями в том, что первая оставляет символ разделения строк в буфере , а вторая удаляет его.

Существует ещё несколько дополнительных методов:

Ignore(80,”\n”) параметры — сколько пропускается символов без чтения и разделитель.

Peek() — просматривает, но не считывает очередной символ.

Putback() —вставляет символ в поток ввода.


#include <iostream.h>

#include <iomanip.h>

Int main(void)

{

Char ch;

cout <<"введите фразу: ";

While(cin.get(ch))

{

if(ch=='!') cin.putback('$');

else cout <<ch;

while(cin.peek()=='#')

cin.ignore(1,'\n');

}

Return 0;

}

Результат работы программы:

введите фразу: кен!!gh#ghj##sdfdgfh

// кен$$ghghjsdfdgfh


Для объекта cout существуют соответствующие методы put() и write().

Cout.put() и cout.write(мах. Размер вывода);

Кроме этого существуют так называемые флаги и манипуляторы для форматированного ввода.

Cout.Width() — устанавливается точное значение ширины поля ввода.

Cout.fill(‘*’) — заполнение пустых позиций поля * (можно другой символ).

Флаги позволяют оформить вывод:

Управление выводом данных:


§ \n— новая строка.

§ \t—табуляция (несколько пробелов).

§ \\— обратный слеш.

§ \a—звуковой сигнал.

Манипуляторы, не требующие включения файла iomanip.h:

§ flush—очищает буфер ввода

§ endl—вводит конец строки

§ oct —8- ричное представление числа

§ dec —10- ричное представление числа

§ hex —16- ричное представление числа

Манипуляторы, требующие включения файла iomanip.h:

§ setw(ширина) —ширина поля вывода.

§ setfill(символ) —символ заполнения пустых позиций.

§ setprecision (точность) —количество знаков после ,.


Все манипуляторы, кроме flush, end, setw() остаются включенными на протяжении работы всей программы, если не будет других установок.

Флаги используют формат написания setf(ios::флаг1 | ios::флаг2). (дом. Работа)


Лекция № 8.Использование файлов для ввода-вывола.








Дата добавления: 2015-12-26; просмотров: 712;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.013 сек.