- •5)Указатели и ссылки.
- •12) Параметры структурных типов.
- •13) Классы памяти переменных.
- •14) Параметры-функции.
- •15) Правила, определяющие видимость переменных в функциях.
- •16) Пространства имен.
- •19) Функции с параметрами по умолчанию.
- •20) Текстовые файлы. Отличие от Delphi Pascal.
- •Int Pages;
- •Int getPages(); // тело будет описано в book.Сpp
- •18) Перегрузка функций.
- •Int fscanf(file *stream,const char *format[,adress,...]);
- •Int fprintf(file *stream,const char *format[,argument,...]);
- •21) Двоичные файлы. Отличие от Delphi Pascal.
- •22) Определение класса, компоненты класса. Ограничение доступа.
- •23) Инициализация полей при отсутствии конструктора.
- •24) Конструкторы. Инициализация полей при наличии конструктора.
- •25) Деструкторы.
- •27) Простое и множественное наследование классов.
- •28) Наследование. Ограничение доступа при наследовании.
- •29) Конструкторы и деструкторы производных классов.
- •30) Композиция.
- •31)Наполнение
- •32) Полиморфное наследование. Простой полиморфизм.
- •33) Полиморфное наследование. Сложный полиморфизм.
- •34) Статические компоненты классов.
- •35) Особенности работы с динамическими объектами.
- •36) Объекты с динамическими полями. Копирующий конструктор.
- •Void Print(tPoint r) {…}
- •37) Дружественные функции, методы и классы.
- •38) Переопределение операций.
- •39) Шаблоны классов.
- •40) Шаблоны функций.
- •46) Сигналы, слоты и события Qt.
Int fscanf(file *stream,const char *format[,adress,...]);
Функция работает аналогично scanf (и scanf_s), но при этом осуществляется
ввод не с клавиатуры, а из указанного файла. Возвращает количество введенных полей.
Если при выполнении операции достигается конец файла, то функция возвращает EOF.
Форматный вывод:
Int fprintf(file *stream,const char *format[,argument,...]);
Функция работает аналогично printf, но при этом вывод осуществляется в указан-
ный файл.
21) Двоичные файлы. Отличие от Delphi Pascal.
В двоичных файлах информация хранится во внутренних форматах без преобразования к символьному виду. Запись в файл и чтение из файла осуществляется через специальный буфер, причем программист должен указывать количество обрабатываемых байт. Разделители компонентов в файле отсутствуют. Если в двоичном дисковом файле все компоненты одинаковой длины, то можно вычислить значение файлового указателя для каждого компонента, и, соответственно, осуществить прямой доступ к элементам.
Двоичный файл, содержащий текстовую информацию, практически ничем не отличается от текстового. Принципиально возможно создать файл как текстовый, а затем прочитать его как двоичный, элементами которого являются
строки (в этом случае необходимо знать их длину) или символы. При этом нами будут прочитаны также символы, образующие маркер ≪Конец строки≫ (см. пример 30). Соответственно, и наоборот, можно создать файл как двоичный, а прочитать – как текстовый.
Примечание. Двоичный файл, содержащий несимвольную информацию, при просмотре текстовыми редакторами выглядит как нагромождение букв и символов псевдографики. Создать такой файл текстовыми редакторами нельзя.
При программировании операций ввода/вывода с двоичными файлами используют специальные функции, которые работают с двоичными образами данных, сгруппированными в блоки.
Функция ввода из двоичного файла:
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
Функция вводит информацию из файла в буфер по адресу ptr объемом size*n, где size – размер вводимого блока, а n – количество блоков. В качестве результата функция
возвращает действительно считанное количество блоков. При достижении конца файла функция возвращает 0, а при обнаружении ошибок – -1.
Функция вывода в двоичный файл:
size_t fwrite(void *ptr,size_t size,size_t n,FILE *stream);
Функция выводит информацию из буфера по адресу ptr объемом size*n.
Указанные функции в основном используются в двух вариантах:
а) при работе со структурами:
fread (&myrec,sizeof(myrec),1,f1);
fwrite (&myrec,sizeof(myrec),1,f1);
где myrec – переменная типа структура;
б) при работе с файлом в целом, когда обрабатываемая информация не детализируется, например, при копировании файла:
size_t bufSize=0x200;
char *buffer = new char[bufSize];
fread (buffer,1,bufSize,f2);
fwrite(buffer,1,bufSize,f2);...
delete[] buffer;
Размер буфера при этом, как правило, задается кратным 512 байт.
22) Определение класса, компоненты класса. Ограничение доступа.
В С++, так же как и в других язьпсах программирования, класс - это
структурный тип, используемый для описания некоторого множества объектов
предметной области, имеющих общие свойства и поведение.
class <Имя класса>
{ private: <Внутренние компоненты класса>;
protected: <Защищенные компоненты класса>;
public: <Общедоступные компоненты класса>;
};
В качестве компонентов в описании класса фигурируют поля,
используемые для хранения параметров объектов, и функций, описывающие
правила взаимодействия с ними. В соответствии со стандартной терминологией ООП функции - компоненты класса или компонентные функции можно назвать методами.
Компоненты класса, объявленные в секции private, называются
внутренними. Они доступны только компонентным функциям того же класса и функциям, объявленным дружественными описываемому классу.
Компоненты класса, объявленные в секции protected, называются защищенными. Они доступны компонентным функциям не только данного класса, но и его потомков. При отсутствии наследования интерпретируются как внутренние.
Компоненты класса, объявленные в секции public, называются общими. Они доступны за пределами класса в любом месте программы. Именно в этой
секции осуществляется объявление полей и методов интерфейсной части
класса.
