- •Ссылочный тип данных. Определение, отличия от переменной-указателя. Передача параметра в функцию по ссылке.
- •Псевдокод. Определение, примеры хорошего и плохого псевдокода.
- •Бинарные файлы. Преимущества и недостатки использования бинарных файлов, функции для записи и чтения бинарных файлов в языке c.
- •Бинарные файлы. Запись массивов и структур в бинарные файлы. Примеры.
- •Файловая система. Путь до файла. Маска файлов. Атрибуты файлов.
- •Связные списки. Понятие контейнера, определение и классификация связных списков. Преимущества связных списков перед массивами.
- •Связные списки. Добавление элемента в начало, в конец, в произвольную позицию списка. Сравнение с добавлением в массив. Примеры.
- •Основы ооп. Различия функциональной и объектной декомпозиции. Мотивация введения ооп. Понятия класса и объекта.
- •Связные списки. Удаление элемента из списка. Сравнение с удалением из массива. Примеры.
- •Связные списки. Обход списка. Сортировка списка. Примеры.
- •Основы ооп. Конструкторы и деструкторы. Определения, примеры реализации. Перегрузка конструкторов.
- •Основы ооп. Решение задачи создания списочной структуры средствами ооп (задача о списке студентов).
- •Библиотека mfc. Отличия создания программы под Windows с графическим интерфейсом от консольного приложения. Понятия окна и сообщения.
- •Библиотека mfc. Этапы работы программы под mfc. Понятие компонента. Основные компоненты mfc.
Бинарные файлы. Запись массивов и структур в бинарные файлы. Примеры.
Пример сохранения массива структур в бинарный файл:
#include"stdafx.h"
#include<stdio.h>
// ...
structtovar
{
// ...
};
int _tmain(int argc, _TCHAR* argv[])
{
FILE* fp = fopen("myFile.dat", "wb");
int a = 25; // Количество элементов в массиве структур
tovar *Tov = new tovar[a];
fwrite(&a, sizeof(int), 1, fp);
for (int i = 0; i<a; i++)
fwrite(&Tov[i], sizeof(tovar), 1, fp);
return 0;
}
Пример чтения массива структур из бинарного файла:
#include"stdafx.h"
#include<stdio.h>
// ...
structtovar
{
// ...
};
int _tmain(int argc, _TCHAR* argv[])
{
FILE* fp = fopen("myFile.dat", "rb");
int a = 0; // Количество элементов в массиве структур
fread(&a, sizeof(int), 1, fp);
tovar *Tov = new tovar[a];
for (int i = 0; i<a; i++)
fread(&Tov[i], sizeof(tovar), 1, fp);
return 0;
}
Файловая система. Путь до файла. Маска файлов. Атрибуты файлов.
Файловая система: Способ хранения и организации доступа к данным на информационном носителе или его разделе. Классическая файловая система имеет иерархическую структуру, в которой файл однозначно определяется полным путём к нему.
Полный путь до файла или папки - способ однозначного определения файла или папки в файловой системе. Относительный путь до файла или папки – способ определения файла или папки относительно другой папки.
C:\Windows\Temp\Text.txt
Маска файла часто используется для определения группы файлов или папок в файловой системе.
Метасимвол |
Значение |
* |
Любое количество символов (в том числе и 0) |
? |
Один любой символ |
Любой символ |
Обязательное вхождение заданного символа |
Пример |
Пояснение |
*.cpp |
Все файлы с расширением .cpp |
f*.ex? |
Все файлы, начинающиеся с f, и заканчивающиеся расширением .ex с любым символом на конце |
*co* |
Все файлы содержащие co |
Каждый файл, помимо имени, имеет ряд атрибутов. Наиболее значимые из них: • Размер файла; • Даты создания, изменения и последнего обращения к файлу; • Файловые флаги (атрибуты): папка, архивных, системный, только для чтения, скрытый.
Работа с файловой системой в С++. Структура WIN32_FIND_DATA. Примеры.
struct WIN32_FIND_DATA
{
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
charcFileName[MAX_PATH];
charcAlternateFileName[14];
};
Получение списка файлов:
HANDLE FindFirstFile(constchar* sFileMask, WIN32_FIND_DATA* lpFindFileData);
BOOL FindNextFile(HANDLE hFindFile, WIN32_FIND_DATA* lpFindFileData);
Получение списка файлов и папок по заданной маске:
#include<Windows.h>
Using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
WIN32_FIND_DATA fd;
HANDLE hFind = FindFirstFile("c:\\*", &fd);
do
{
if (hFind == INVALID_HANDLE_VALUE)
break;
cout<<fd.cFileName<<"\n";
} while (FindNextFile(hFind, &fd));
FindClose(hFind);
return 0;
}
Работа с атрибутами:
HANDLE hFind = FindFirstFile(L"c:\\*", &fd);
do
{
cout<<fd.cFileName<<"\t\t\t";
if (fd.dwFileAttributes& FILE_ATTRIBUTE_DIRECTORY)
cout<<"<DIR> ";
if (fd.dwFileAttributes& FILE_ATTRIBUTE_HIDDEN)
cout<<"<HIDDEN> ";
if (fd.dwFileAttributes& FILE_ATTRIBUTE_SYSTEM)
cout<<"<SYSTEM> ";
cout<<"\n";
} while (FindNextFile(hFind, &fd));
FindClose(hFind);
Атрибут |
Значение |
FILE_ATTRIBUTE_DIRECTORY |
Папка |
FILE_ATTRIBUTE_HIDDEN |
Скрытый файл |
FILE_ATTRIBUTE_SYSTEM |
Системный |
FILE_ATTRIBUTE_ARCHIVE |
Архивный |
FILE_ATTRIBUTE_READONLY |
Только для чтения |
Работа с датами в С++. Структуры FILETIME и SYSTEMTIME . Примеры.
struct FILETIME
{
DWORD dwLowDateTime;
DWORD dwHighDateTime;
}; //Хранит количество сотен наносекунд, прошедших с 1 января 1601 года
struct SYSTEMTIME
{
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
};
Преобразование FILETIME в SYSTEMTIME:
BOOL FileTimeToSystemTime(const FILETIME* lpFileTime, SYSTEMTIME* lpSystemTime);
Пример вывода даты на экран:
HANDLE hFind = FindFirstFile(L"c:\\*", &fd);
do
{
cout<<fd.cFileName<<"\t\t\t";
SYSTEMTIME st;
if (FileTimeToSystemTime(&fd.ftCreationTime, &st) == TRUE)
{
cout<<st.wDay<<"-"<<st.wMonth<<"-"<<st.wYear<<" ";
cout<<st.wHour<<":"<<st.wMinute<<":"<<st.wSecond<<" ";
} //...
cout<<"\n";
} while (FindNextFile(hFind, &fd));
FindClose(hFind);
Вывод даты согласно часовому поясу:
BOOL FileTimeToLocalFileTime(const FILETIME* lpFileTime, FILETIME* lpLocalFileTime);
