билет 11 (Ответы на билеты)
Описание файла
Файл "билет 11" внутри архива находится в папке "Bilety_s_otvetami-progr". Документ из архива "Ответы на билеты", который расположен в категории "". Всё это находится в предмете "программирование" из 3 семестр, которые можно найти в файловом архиве МПУ. Не смотря на прямую связь этого архива с МПУ, его также можно найти и в других разделах. Архив можно найти в разделе "к экзамену/зачёту", в предмете "программирование" в общих файлах.
Онлайн просмотр документа "билет 11"
Текст из документа "билет 11"
-
Заголовочный файл iostream.h содержит определения классов, которые вы можете проанализировать, чтобы лучше понять потоковый ввод/вывод.
-
Используя метод cout.width, ваши программы могут управлять шириной вывода.
-
Используя метод cout.fill, ваши программы могут заменить пустые выходные символы (табуляцию и пробелы) некоторым определенным символом.
-
Для управления количеством цифр, выводимых выходным потоком cout для значений с плавающей точкой, ваши программы могут использовать метод cout.setprecision.
-
Для вывода и ввода по одному символу за один раз ваши программы могут использовать потоковые методы cout.put и cin.get.
-
Используя метод cin.getline, ваши программы могут вводить целую строку за один раз.
Форматированный ввод/вывод
Для того чтобы организовать форматированный ввод и вывод , аналогичный тому , что предоставляют пользователю функции printf() и scanf() в языке C++ используются два способа.
Первый состоит в применении функций членов - класса ios.
При втором способе употребляется специальный вид функций, называемых манипуляторами.
Пример вывода и числа:
#include
void main(void)
{cout << "Мое любимое число равно " << 1001;}
Пример форматирования:
#include
#include
void main(void)
{ cout << "Мое любимое число" << setw(3) << 1001 << endl;
cout << "Мое любимое число" << setw (4) << 1001 << endl;
cout << "Мое любимое число" << setw (5) << 1001 << endl;
cout << "Мое любимое число" << setw(6) << 1001 << endl;}
Подобным образом метод cout.width позволяет вам указать минимальное количество символов, которое будет использовать сои/для вывода следующего значения.
-
Подпрограмма обработки прерывания от клавиатуры сканирует код клавиши. Если это цифровая клавиша, то записывает его в буфер, запускает таймер ожидания нажатой клавиши, проверяет, не переполнился ли буфер, рассчитанный на 6 цифровых клавиш. Если буфер переполнился, то подпрограмма очищает буфер. Если нажата клавиша #, то буфер очищается. Если нажата *, то подпрограмма проверяет количество нажатых клавиш (не менее 3), и производит поиск кода в EEPROM. Если код не найден, то буфер очищается. Очистка буфера сопровождается длинным писком и желтым светодиодом. Если код найден, то если это мастер-код выполняется подпрограмма входа в режим программирования, если код доступа, то открывается управляющее реле. Время открывания читается из EEPROM.
2)
Стандартная библиотека шаблонов STL (англ. standard template library) — набор шаблонов функций и классов в языке C++, включающий в себя различные контейнеры данных (список, очередь, множество, отображение, хэштаблица, очередь с приоритетами) и базовые алгоритмы (сортировка, поиск).
Контейнеры
STL контейнеры делятся на последовательные: vector, deque, list и ассоциативные: set, multiset, map, multimap.
Контейнер | Описание | ||
последовательныее контейнеры (упорядоченные списки) | |||
Vector | C-подобный динамический массив произвольного доступа с автоматическим изменением размера при добавлении/удалении элемента. Добавление-удаление элемента в конец vector занимает амортизированное О(1) время, та же операция в начале или середине vector- О(n). Существует специальный вариант vector для типа bool, уменьшающий потребную память за счет битового хранения . | ||
List | Двух-связанный список, элементы которого в произвольных кусках памяти, в отличие от непрерывной памяти vector. Медленный поиск и доступ (О(n)), быстрая вставка и удаление (О(1)). | ||
Deque | vector с возможностью быстрой вставки-удаления не только в конец, но и в начало. | ||
basic_string | контейнер заточенный на обработку строк - хранит в памяти элементы в последовательно, что даёт быстрый доступ ко всей последовательности | ||
ассоциативные контейнеры (неупорядоченные списки) | |||
Set | сортированнoe множество, такой что вставка/удаление нового элемента не приводит к компрометации итератора указывающего на него. Обеспечивает стандартные операции над множествами типа объединения, пересечения, вычитания.Тип элементов set должен реализовывать оператор сравнения operator <. Реализован на основе технологии само-балансирующего поиска по двоичному дереву. | ||
Multiset | то же что и set, кроме того позволяет хранить одинаковые элементы. | ||
Map | сортированный ассоциативный массив пар элементов, позволяющий установить соответствие между элементами пары. Один из элементов пары принято называть ключем, другой - величиной. При этом тип ключа должен реализовывать оператор сравнения <, либо перегружать функцию сравнения. | ||
multimap | то же что и map, плюс возможность хранить разные величины под одним и тем же ключем. | ||
hash_set hash_multiset | подобны set, multiset, map, multimap, соответственно, но реализованы на основе хеш таблицы. Ключи не сортированы, для типа ключа должна существовать хэш функция. Эти контейнеры не входят в стандарт C++, однако включены в SGI STL расширение, и в ряд распространённых библиотек, в частности в GNU C++ Library. | ||
другие типы контейнеров | |||
Bitset | Похож на vector фиксированного размера. Предназначен для хранения последовательностей битов. Минимизирован по размеру памяти. | ||
Valarray | C-подобный массив в духе vector. Разработан для скоростных численных расчетов, оптимизирован для векторных супер компьютеров. Пригоден для скалярных процессоров работающих на основе идеологии SIMD |
Итератор (англ. iterator) — объект, предназначенный для предоставления доступа к элементам некоторой последовательности. В таких языках, как Оберон и Глагол, называется также бегуно́к и представлен как тип данных. В простейшем случае итератором в низкоуровневых языках является указатель.
Использование итераторов в обобщённом программировании позволяет реализовать универсальные алгоритмы работы с контейнерами или любыми последовательностями.
3) Наследование – это свойство объекта, которое заключается в том, что характеристики одного объекта (объекта-предка) могут передаваться другому объекту (объекту-потомку) без их повторного описания. Наследование упрощает описание объектов.
Типы наследования
Простое наследование
Класс, от которого произошло наследование, называется базовым или родительским (англ. base class). Классы, которые произошли от базового, называются потомками, наследниками или производными классами (англ. derived class).
Класс, от которого произошло наследование, называется базовым или родительским (англ. base class). Классы, которые произошли от базового, называются потомками, наследниками или производными классами (англ. derived class).
В некоторых языках используются абстрактные классы. Абстрактный класс — это класс, который описан в программе, имеет поля, функции, но не используется для создания объекта. Объекты создаются только на основе производных классов, наследованных от абстрактного. Например, абстрактным классом может быть базовый класс «сотрудник ВУЗа», от которого наследуются классы «аспирант», «профессор» и т.д. Т.к. производные классы имеют общие поля и функции (например, поле «год рождения»), то эти члены класса могут быть описаны в базовом классе. В программе создаются объекты на основе классов «аспирант», «профессор», но нет смысла создавать объект на основе класса «сотрудник вуза».
Множественное наследование
При множественном наследовании у класса может быть более одного предка. В этом случае класс наследует методы всех предков. Достоинства такого подхода в большей гибкости. Множественное наследование реализовано в C++. Из других языков, предоставляющих эту возможность, можно отметить Python. Множественное наследование поддерживается в языке UML.
Множественное наследование — потенциальный источник ошибок, которые могут возникнуть из-за наличия одинаковых имен методов в предках. В языках, которые позиционируются как наследники C++ (Java, C# и др.), от множественного наследования было решено отказаться в пользу интерфейсов.
Большинство современных объектно-ориентированных языков программирования (C#, Java, Delphi и др.) поддерживает возможность одновременно наследоваться от класса-предка и реализовать методы нескольких интерфейсов одним классом. Этот механизм позволяет во многом заменить множественное наследование — методы интерфейсов необходимо переопределять явно, что исключает ошибки при наследовании функциональности одинаковых методов различных классов-предков.
Виртуальное наследование
Виртуальное наследование – это частный случай множественного наследования.
Виртуальное наследование решает проблему наследования нескольких экземпляров базового класса, когда нужен только один разделяемый экземпляр.
Виртуальная функция (virtual function) является членом класса. Она объявля-
ется внутри базового класса и переопределяется в производном классе. Для
того, чтобы функция стала виртуальной, перед объявлением функции ста-
вится ключевое слово virtual. Если класс, содержащий виртуальную функ-
цию, наследуется, то в производном классе виртуальная функция
переопределяется. По существу, виртуальная функция реализует идею "один
интерфейс, множество методов", которая лежит в основе полиморфизма.
Виртуальная функция внутри базового класса определяет вид интерфейса
этой функции. Каждое переопределение виртуальной функции в производ-
ном классе определяет ее реализацию, связанную со спецификой производ-
ного класса. Таким образом, переопределение создает конкретный метод.
При переопределении виртуальной функции в производном классе, ключе-
вое слово virtual не требуется.
Наследование в языке C++
«Наследование» в C++:
class A{ //базовый класс
};
class B : public A{ //public наследование
}
class C : protected A{ //protected наследование
}
class Z : private A{ //private наследование
}
В C++ существует три типа наследования: public, protected, private. Спецификаторы доступа членов базового класса меняются в потомках следующим образом:
-
при public-наследовании все спецификаторы остаются без изменения.
-
при protected-наследовании все спецификаторы остаются без изменения, кроме спецификатора public, который меняется на спецификатор protected (то есть public-члены базового класса в потомках становятся protected).
-
при private-наследовании все спецификаторы меняются на private.
Одним из основных преимуществ public-наследования является то, что указатель на классы—наследники может быть неявно преобразован в указатель на базовый класс, то есть для примера выше, можно написать
A* a = new B;
Эта интересная особенность открывает возможность динамической идентификации типа.
У этого термина существуют и другие значения, см. Класс.
Класс наряду с понятием «Объект », является важным понятием объектно-ориентированного подхода в программировании (хотя существуют и беcклассовые объектно-ориентированные языки, например, JavaScript). Под классом подразумевается некая сущность, которая задает некоторое общее поведение для объектов. Таким образом, любой объект может принадлежать или не принадлежать определенному классу, то есть обладать или не обладать поведением, которое данный класс подразумевает. Класс определяет для объекта контракт, то есть правила, с помощью которых с объектом могут работать другие объекты (обычно это делается с помощью определения методов класса). Кроме того классы могут находиться друг с другом в различных отношениях, таких как Наследование или Агрегация.
Виды классов
-
Базовый (родительский) класс
-
Производный класс (наследник, потомок)
-
Абстрактный (виртуальный) класс
Эти виды классов описаны в статье Наследование, так как связаны именно с этим отношением.
Члены классов
Класс определяется как список своих членов. К членам класса относятся его поля (свойства) и функции (методы) .
Каждому члену класса можно установить его область доступа (access control level). Область доступа члена класса определяет участки кода, из которых к этому члену будет возможно обращаться. В большинстве объектно-ориентированных языков программирования поддерживаются следующие области доступа:
-
private (закрытый, внутренний член класса) — обращения к члену допускаются только из кода методов класса, в котором этот член определён. Любые наследники класса уже не смогут получить доступ к этому члену;
-
protected (защищённый, внутренний член иерархии классов) — обращения к члену допускаются из кода методов класса, в котором этот член определён, или из любых его классов-наследников;
-
public (открытый член класса) — обращения к члену допускаются из любого кода.