- •Предисловие
- •Введение
- •Введение в программирование
- •1.1. Предисловие к курсу
- •1.2. Идеология языка
- •1.3. Обзор среды Microsoft Developer Studio
- •1.4. Жизненный цикл программного обеспечения
- •1.5. Общая структура программы
- •1.6. Директивы препроцессора
- •1.7. Построение исполняемого файла
- •1.8. Строительные блоки программы
- •Контрольные вопросы
- •Типы данных. Переменные. Массивы. Операции и Указатели
- •Стандартные типы и размеры данных
- •2.1.1. Объявление переменных
- •Управляющие символьные константы
- •2.2. Объявление указателя
- •2.2.1. Операции разыменования и взятия адреса
- •2.2.2. Указатели на указатели
- •2.2.3. Арифметические операции с указателями
- •2.3. Массивы
- •2.3.1. Инициализация массивов
- •2.3.2 Динамические массивы
- •2.3.3. Методы доступа к элементам массивов
- •2.3.4. Массивы указателей
- •2.4. Строки
- •2.5. Операции
- •2.5.1. Арифметические операции
- •Арифметические операции
- •2.5.2 Операции сравнения и логические операции
- •Операции сравнения и логические операции
- •2.5.3. Побитовые операции
- •Побитовые операции
- •Контрольные вопросы
- •3.1. Базовые операторы
- •3.1.1. Оператор выражение
- •3.2.2. Оператор switch
- •3.3.4. Оператор goto
- •3.4. Операторы цикла
- •3.4.1. Оператор for
- •3.4.2. Оператор while
- •3.4.3. Оператор do..While
- •Контрольные вопросы
- •Стандартный ввод/вывод. Работа с файлами.
- •4.1. Роль стандартного ввода/вывода
- •4.1.1. Основные функции стандартного ввода/вывода
- •4.2. Понятие файла
- •4.2.1. Строение файлов
- •4.2.2. Порядок работы с файлом
- •4.2.3. Обзор библиотечных функций с для работы с файлами
- •4.3. Программные конструкции при работе с файлами
- •4.3.1. Открытие/закрытие файла
- •4.3.2. Цикл посимвольного чтения содержимого файла
- •4.3.3. Цикл построчного чтения содержимого файла
- •Контрольные вопросы
- •Функция. Пользовательские типы данных.
- •5.1. Понятие функции
- •5.1.1. Определение функции
- •5.1.2. Формальные параметры
- •5.1.3. Тип возвращаемого значения
- •5.1.4. Тело функции
- •5.1.5. Фактические параметры
- •5.1.6. Рекурсивные вызовы
- •5.1.7. Передача параметров
- •5.1.8. Библиотеки стандартных функций
- •5.2. Пользовательские типы данных.
- •5.2.1. Ключевое слово typedef
- •5.2.2. Перечислимый тип данных
- •5.2.3. Понятие структуры
- •5.2.4. Указатели на структурный объект
- •Контрольные вопросы
- •Работа с динамической памятью. Динамические структуры данных
- •6.1. Работа с динамической памятью
- •6.1.1. Статическое и динамическое распределение памяти
- •6.1.2. Основные принципы динамического распределения
- •6.1.3. Способы работы с динамической памятью
- •6.2. Динамические структуры данных
- •6.2.1. Стек
- •6.2.2.Линейный список
- •Контрольные вопросы
- •Объектно-ориентированное программирование
- •7.1. Критерии качества декомпозиции проекта
- •7.2. Новые концепции программирования
- •7.3. Достоинства ооп
- •7.4. Объекты и классы в ооп
- •7.4.1. Определение класса
- •7.4.2. Использование класса
- •7.4.3. Вложенные классы
- •Контрольные вопросы
- •Конструкторы и Перегрузка операций.
- •8.1. Перегрузка операций
- •8.1.1. Перегрузка операций внешними функциями
- •8.1.2. Перегрузка операций методами класса
- •8.2. Конструкторы и деструктор
- •8.2.1. Конструкторы и параметры
- •Контрольные вопросы
- •9.1. Простое открытое наследование
- •9.1.1 Конструкторы и деструкторы при наследовании
- •9.1.2. Поля и методы при наследовании
- •9.1.3. Вложенные классы и наследование
- •9.1.4. Закрытое наследование
- •9.1.5. Виртуальные функции
- •9.1.6. Чистые виртуальные функции и абстрактные классы
- •9.3. Основы программирования под Windows
- •9.3.1. Типы данных в Windows
- •9.4. Cреда Microsoft Developer Studio
- •9.4.1. Библиотека mfc
- •9.4.2. Архитектура приложения
- •9.4.3. Каркас приложения
- •9.4.4. Проект приложения
- •Контрольные вопросы
- •Заключение
- •Список Литературы
5.2. Пользовательские типы данных.
Типы данных, определяемые пользователем, являются важнейшим инструментом в современном программировании. Стандартные (встроенные) типы, такие как int, char, double и т.д. являются примитивными, поскольку оперируют с числами и символами, в то время как существующие структуры данных намного сложнее.
Вторая причина, из-за которой следует переходить к пользовательским типам данных, заключается в том, что стандартные типы не информативны, т.е. «int a» может означать целое число студентов, координату пиксела, номер открытого файла. Несмотря на то, что все эти понятия имеют характер целых чисел, их желательно не смешивать, используя один тип.
5.2.1. Ключевое слово typedef
Ключевое слово typedef используется для присвоения нового имени существующему типу. Допустим, утомительно писать в программе объявления с unsigned int, например:
unsigned int x;
unsigned int y;
Присвоим unsigned int новое обозначение с помощью typedef
typedef unsigned int UI;
UI x;
UI y;
Кроме задания типов с длинными описаниями более коротких псевдонимов, typedef используется для облегчения переносимости программ. Если машинно-зависимые типы объявить с помощью typedef, при переносе этих программ потребуется внести изменение только в эти операторы.
5.2.2. Перечислимый тип данных
При написании программ часто возникает потребность определить несколько именованных констант, для которых требуется, чтобы все они имели различные значения. Для этого можно воспользоваться перечислимым типом данных, все значения которого задаются списком именованных констант, например:
enum COLORS { RED, GREEN, BLUE };
COLORS color;
switch (color)
{
case RED: ....;
case GREEN: ....;
case BLUE: ....;
}
При выполнении арифметических операций перечисления преобразуются в целые.
5.2.3. Понятие структуры
Структура – это набор из одной или более переменных, возможно, различных типов, сгруппированных под одним именем для удобства обработки.
В отличие от массива, который является однородным объектом, структура может быть неоднородной. Традиционным примером структуры является учетная карточка работника: “служащий“ описывается набором атрибутов, таких как фамилия, имя, отчество, адрес, код социального обеспечения, зарплата и т.д. Некоторые из этих атрибутов сами могут оказаться структурами, например адрес.
Структуры оказываются полезными при организации сложных данных, особенно в больших программах, поскольку во многих ситуациях они позволяют сгруппировать связанные данные таким образом, что с ними можно обращаться как с одним целым, а не как с отдельными объектами. Ключевое слово struct сообщает компилятору, что объявляется именно структура. Тип структуры определяется записью, как показано далее.
struct addr
{
список определений;
}
В приведенном ниже примере идентификатор student описывается, как структура:
struct STUDENT
{
char name[25];
int id, age;
}
struct DATE
{
int DAY;
int MONTH;
int YEAR;
}
Описание структуры, за которым не следует списка переменных, не приводит к выделению какой-либо памяти; оно только определяет шаблон или форму структуры.
Структуры не могут быть прямо рекурсивными, т.е. структура node не может содержать компоненту, являющуюся структурой node, но любая структура может иметь компоненту, являющуюся указателем на свой тип, как и сделано в приведенном примере. Доступ к компонентам структуры осуществляется с помощью указания имени структуры и следующего через точку имени выделенного компонента.
Например:
strcpy(st1.name,"Иванов");
st2.id=st1.id;
Структуры могут быть вложенными, например учетная карточка служащего может фактически выглядеть так:
struct PERSON
{
char NAME[NAMESIZE];
char ADDRESS[ADRSIZE];
long ZIPCODE; /* почтовый индекс */
long SS_NUMBER; /* код соц. Обеспечения */
double SALARY; /* зарплата */
DATE BIRTHDATE; /* дата рождения */
DATE HIREDATE; /* дата поступления на работу */
};