Наследование в C++. Закрытый, защищённый, форматированный ввод. Ввод-вывод в файл в Си
НаследованиеНаследование обозначает такое отношение между классами, когда один класс использует структурную или функциональную часть одного или нескольких классов (соответственно простое и множественное наследование). Наследование является иерархической системой, позволяющей лучше выразить взаимодействия между классами. Иерархия представляет собой вид отношений подчинённости типа: принадлежности частного общему. Когда мы говорим, что нечто является видом чего-либо, мы подразумеваем большую детализацию. В С++ иерархичность реализована в концепции классов — когда один класс может наследовать или происходить от класса более высокого уровня. В наследовании классов реализуются принципы их иерархической подчинённости. Если объявляется наследуемый класс, то базовый класс должен быть описан выше, иначе компилятор сгенерирует ошибку. Синтаксис : (открытое наследование): В описании базового класса появляется новое слово:protected, так как данные под словом private не доступны для наследования. Какой бы доступ не был определён для наследования данные, описанные в базовом классе как private не доступны для производного класса. #include <iostream.h>
Результат работы программы: x=10
Инициализация наследуемых классовВсе действия по инициализации объектов выполняет конструктор порождённого класса. Если конструктору базового класса требуются аргументы, то они должны быть указаны в списке аргументов конструктора. В общем виде конструктор имеет вид: Конструктор_производного_класса(список аргументов): базовый_класс1( список аргументов)…базовый_класс_N (список аргументов) { тело конструктора} Производный класс может иметь не один , а несколько базовых. В этом случае базовые классы указываются списком. #include <iostream.h>
Результат работы программы: работа конструктора B1 Конструкторы базового класса должны быть объявлены с атрибутами protected илиpublic для того, чтобы обеспечить возможность их вызова из класса-наследника.
ПотокиКлассы ввода-вывода iostream рассматривают информацию, как побитовый поток данных. Если данные выводятся на экран или заносятся в файл, то источник их как правила находится в программе. Если поток направлен в противоположную сторону, то данные могут поступать либо с клавиатуры или из файла, В этом случае они заносятся в переменные. Операция записи на диск достаточно временноёмка, поэтому используют буфер обмена.
В файле iostream.h определены классы iostream и ostream, именно то, что эти операторы ввода-вывода работают с классами, позволяет перегружать их для работы с классами пользователя. Оператор cin является глобальным объектом и перегружается таким образом, что можно вводить различные типы данных. В частности при помощи этого объекта модно ввести тип *char, то есть строку символов. Можно использовать дополнительные методы этого класса, что бы более полно контролировать ввод-вывод. Пример : ввод одного символа можно реализовать при помощи метода cin.get()>>
#include <iostream.h> 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>
Результат работы программы: введите фразу: кен!!gh#ghj##sdfdgfh
Для объекта cout существуют соответствующие методы put() и write(). Cout.put() и cout.write(мах. Размер вывода); Cout.Width() — устанавливается точное значение ширины поля ввода. Cout.fill(‘*’) — заполнение пустых позиций поля * (можно другой символ). Флаги позволяют оформить вывод: Управление выводом данных
Манипуляторы, не требующие включения файла iomanip.h:
Манипуляторы, требующие включения файла iomanip.h:
Все манипуляторы, кроме flush, end, setw() остаются включенными на протяжении работы всей программы, если не будет других установок. |