Вопросы к ЛР ответы (Вопросы по ЛР с ответами)
Описание файла
Файл "Вопросы к ЛР+ответы" внутри архива находится в папке "Вопросы по ЛР с ответами". Документ из архива "Вопросы по ЛР с ответами", который расположен в категории "". Всё это находится в предмете "объектно-ориентированное программирование (ооп)" из 3 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "объектно-ориентированное программирование (ооп)" в общих файлах.
Онлайн просмотр документа "Вопросы к ЛР ответы"
Текст из документа "Вопросы к ЛР ответы"
Контрольные вопросы к ЛР №1
-
Что такое проект в BC++? Для чего нужны проекты и в чем из преимущество?
-
Что такое CIN и COUT?
-
В каких файлах, и как описаны CIN и COUT?
-
Что такое манипуляторы как элементы программы?
-
Что нужно сделать для вызова функции, расположенной в другом объектном модуле?
-
Какие основные действия можно предпринять в процессе отладки программы на TD? Перечислите основные операции и возможности, которые можно использовать при отладке программных проектов.
-
Каково назначение функций (методов): setf, width, fill и precision ?
-
Для чего нужны элементы программы dec, hex, oct? Где и как описаны? Что они представляют с точки зрения языка программирования СИ++?
-
Что такое endl и где этот элемент описан?
-
В каких файлах дано определение элемента языка hex ? Нужно указать два определения и два файла.
-
В чем заключаются требования к функциям, вызываемым из потока COUT? Где можно уточнить эти требования (файл и место - класс);
-
Для чего нужны в СП проекты? Как создать новый проект в BC 3.1?
-
Что включается в проекты для DOS и WINDOWS приложений и чем они отличаются?
-
Какие стандартные объекты классов потокового ввода вывода Вы знаете (четыре объекта)?
-
Поясните полную диаграмму классов потокового ввода вывода (наследование и разновидности классов и связей), показанную в броузере классов. Какие связи отражены в этой диаграмме, а какие нет.
-
Объясните назначение и отличие классов, входящих в диаграмму классов потокового ввода вывода.
-
Поясните следующую запись на языке СИ++: cout.setf(ios::showpoint);
-
В каком классе описаны следующие методы: setf, width, fill и precision.
-
В каких классах потокового ввода вывода перегружены операции: “<<” и “>>”.
1.
2. Стандартные потоки ввода, вывода соответственно, являются объектами класса iostream_withassign и ostream_withassign соответственно:
extern istream_withassign _Cdecl cin;
extern ostream_withassign _Cdecl cout;
3. Описаны в файле iostream.h:
extern istream_withassign _Cdecl cin;
extern ostream_withassign _Cdecl cout;
4. Манипуляторы – специальные функции, позволяющие изменять состояние и флаги потока. Способ изменения формата основан на применении специальных функций, называемых манипуляторами, их можно включать в операторы ввода- вывода.
5. Если данный объектный модуль является одним из файлов проекта – в модуле, вызывающем данную функцию, необходимо объявить прототип данной функции.
6.
7. setf - // for reading/setting format flags – для установки флагов форматирования
long _Cdecl setf(long _setbits, long _field);
long _Cdecl setf(long);
width – // reading/setting field width – ширина поля вывода
int _Cdecl width();
int _Cdecl width(int);
fill – // reading/setting padding character – заполняющий пустые позиции символ
char _Cdecl fill();
char _Cdecl fill(char);
precision – // reading/setting digits of floating precision – точность представления вещественных чисел
int _Cdecl precision(int);
int _Cdecl precision();
8. class ios -
// formatting flags
enum {...
dec = 0x0010, // decimal conversion
oct = 0x0020, // octal conversion
hex = 0x0040, // hexadecimal conversion
... };
манипуляторы, преобразовывающие число к заданной системе счисления.
представляют собой перечислимые константы
// constants for second parameter of seft()
static const long basefield; // dec | oct | hex
------------
ios _FAR & _Cdecl dec(ios _FAR &); // set conversion base to decimal
ios _FAR & _Cdecl hex(ios _FAR &); // set conversion base to hexadecimal
ios _FAR & _Cdecl oct(ios _FAR &); // set conversion base to octal
Представляют собой функции.
9. Описан в файле iostream.h
/*
* Manipulators
*/
ostream _FAR & _Cdecl endl(ostream _FAR &); // insert newline and flush
Представляет собой манипулятор, действующий только выводе, обеспечивает включение в выходной поток символа новой строки и сбрасывает в в буфер (выгружает содержимое) этого потока.
10. iostream.h
class ios -
// formatting flags
enum {...
hex = 0x0040, // hexadecimal conversion
... };
ios _FAR & _Cdecl hex(ios _FAR &); // set conversion base to hexadecimal
sthex.cpp
#include <ioconfig.h> #include <iostream.h>
ios _FAR & hex(ios _FAR & s) {s.setf(ios::hex, ios::basefield); return s;}
11.
12. Создать проектный файл для объединения исходных программ лабораторной работы (Project-> Open Project -> <новое имя>, Project-> Add Item -> <выбор модуля> и кнопка Add)
13.
14.
extern istream_withassign _Cdecl cin; - ввода
extern ostream_withassign _Cdecl cout; - вывода
extern ostream_withassign _Cdecl cerr; - вывод для сообщения об ошибках
extern ostream_withassign _Cdecl clog; - буфферизованный вывод для сообщения об ошибках
15.
Наследник ios и далее стрелками, streambuf – отношение включения в класс ios.
streambuf _FAR * bp; // the associated streambuf
streambuf _FAR * _Cdecl rdbuf() {return bp}; // get the assigned streambuf
16. Класс streambuf (и два класса, производных от него – filebuf и strstreambuf), – обеспечивают буферизацию потокового ввода-вывода и абстрагируют обращение к физическим устройствам ввода-вывода.
Класс ios дает начало семейству классов, предназначенных для реализации форматированного и неформатированного ввода-вывода на высоком уровне с возможностью контроля и изменения состояния потока. ios содержит член ios::bp – указатель на streambuf, – посредством которого и «общается» с устройствами ввода-
вывода.
Среди классов, производных от ios, следует назвать следующие:
-
istream – ввод из стандартного устройства ввода. Содержит перегруженный опе-
ратор форматированного ввода >> и ряд функций неформатированного ввода;
-
ostream – вывод на стандартное устройство вывода. Содержит перегруженный
оператор форматированного вывода << и ряд функций неформатированного вы-
вода;
-
iostream – объединяет классы istream и ostream для двунаправленных операций, в которых один поток действует и как источник, и как приемник.
-
производные классы withassign – обеспечивают четыре предопределенных "стандартных" потока: cin, cout, cerr и clog.
-
iostream_withassign – iostream с перегруженным оператором присваивания(аналогично 2 других).
17. При выводе вещественных чисел печатать десятичную точку и следующие за ней нули.
18. class ios
19. istream, ostream
Контрольные вопросы к ЛР №2
-
Поясните структуру классов для ARRAY?
-
Какие данные и методы определены в этом классе?
-
Для чего используется класс ARRAYITERATOR? Его методы?
-
В чем различие классов ARRAY и SORTARRAY?
-
В каком отношении находятся классы ARRAY и SORTARRAY?
-
В каком отношении находятся классы ARRAY и ARRAYITERATOR?
-
Поясните требования к объектам, включаемым в объект ARRAY?
-
Как добавить объект в массив?
-
Можно ли включить в объект класса ARRAY переменную типа FLOAT, INT?
-
Какой ответ в этом случае даст отладчик? Компилятор С++?
-
Почему сложно удалить объект из массива?
-
Назначение и использование методов restart и current?
-
Поясните запись – “MAI.current().printOn(cout);”?
-
Поясните запись – “MB.add(*new String( (String &) MA[i]));”?
-
Как запустить и настроить отладчик в BC 3.1?
-
Какие режимы отладки вы знаете? Перечислите.
-
Что можно делать с данными программы в процессе отладки?
-
Чем отличаются классы ARRAY и Collection?
-
В каком отношении находятся классы ARRAY и ABSTRACTARRAY?
-
В каком отношении находятся классы ARRAY и COLLECTION?
1.
Object – абстрактный базовый класс для всех объектов
Container – абстрактный класс родитель всех классов, включает все классы способные содержать 0 или более элементов
Collection – абстрактный класс “коллекционных” структур
AbstractArray – абстрактный класс с произвольным доступом к элементам
возвращает верхнюю границу
Array – класс массива
ContainerIterator – абстрактный класс итераторов
ArrayIterator – итератор массива (локальный (внутренний) класс AbstractArray)
2. class _CLASSTYPE Array : public AbstractArray
{
public:
Array( int upper, int lower = 0, sizeType aDelta = 0 ) :
AbstractArray( upper, lower, aDelta ) {}
virtual void add( Object _FAR & );
void addAt( Object _FAR &, int );
virtual classType isA() const {return arrayClass;}
virtual char _FAR *nameOf() const {return "Array";}
};
3. ArrayIterator – класс итераторов для массива, является внутренним классом для AbstractArray. (Итератор позволяет перебирать элементы массива).
ArrayIterator( const AbstractArray _FAR & );
virtual ~ArrayIterator();
virtual operator int();
virtual Object _FAR & current();
virtual Object _FAR & operator ++( int );
virtual Object _FAR & operator ++();
virtual void restart();
Для произвольного доступа к элементам классов, входящих в иерархию Abstract Array
4. Добавляет элементы в массив, таким образов, чтобы сохранялось отсортированность массива – добавить на данную позициюент нельзя.
В SortedArray элементы упорядочены по возрастанию, и должна быть определена операция сравнения этих элементов. Здесь отсутствует метод AddAt.
Кроме того, в SortedArray оператор [] не выдаёт выражение, которое может находиться в выражениях в левой части (lvalue).
5. Оба класса – наследники класса AbstractArray.
6. Связаны отношение включения, так как ArrayIterator класс AbstractArray, а ArrayIterator – предок класса Array.
7. Данные объекты должны являться экземплярами классов, производных от класса Object.
8. Воспользовавшися методами
virtual void add( Object _FAR & );
void addAt( Object _FAR &, int );
Например:
String* str;
-
add(*str);
9. Нет, так как переменные данного типа не являются экземплерами классов, производных от класса Object.
10. int * a=new int(11);
A.add(*a);
Error PROB.CPP 11: Cannot create instance of abstract class 'Object'
Error PROB.CPP 11: Could not find a match for 'Object::Object(int)'
Error PROB.CPP 11: Type mismatch in parameter 1 in call to 'Array::add(Object &)'
11. Массив представляет собой структуру данных, элементы которой расположенных в памяти непосредственно друг за другом (в отличие от списка), доступ к которым осуществляется по индексу, поэтому для удаления одного элемента из массива, другие, стоявшие после него требуется сдвигать к началу массива.
12. current() – возвращает ссылку на текущий объект
restart() – перемещает итератор в первую непустую точку массива
13. “MAI.current().printOn(cout);” – вывести на экран элемент массива, определяемый итератором MAI как текущий.
14. “MB.add(*new String( (String &) MA[i]));” – в массив MB добавляется новый элемент, построенный на основе i-го элемента массива MA.
15.
16. Отладчик позволяет выполнять пошаговую трассировку, отслеживать, устанавливать или изменять значения переменных в процессе выполнения программы, устанавливать и удалять контрольные точки или условия остановки и т. д.
Пошаговое выполнение, заход в функцию\цикл, перешагивание через функции\циклы, начало выполнения с определённого места, выполнение до контрольной точки.
17.