- •Предисловие
- •Введение
- •Введение в программирование
- •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. Проект приложения
- •Контрольные вопросы
- •Заключение
- •Список Литературы
7.4.2. Использование класса
Имея определение класса, можно объявлять переменные типа «имя_класса». Переменная класса называется объектом, или экземпляром класса. Класс объявляется один раз, а вот объектов можно создать столько, сколько необходимо. Объекты объявляются аналогично переменным встроенного типа:
имя_класса имя_объекта; // скалярный объект
имя_класса *имя_объекта; // указатель
имя_класса имя_объекта [количество]; // массив
При объявлении переменных можно задавать ключевые слова class и struct:
class имя_класса имя_объекта; // скалярный объект
class имя_класса *имя_объекта; // указатель
struct имя_класса имя_объекта [количество]: // массив
Разрешается совмещать определение класса и объявление переменной:
class имя_класса { члены_класса } имя_объекта; // объект
class имя_класса { члены_класса } *имя_объекта; // указатель
struct имя_класса { члены_класса }
имя_объекта [ количество]; // массив
Эти переменные получают тип «имя_класса». Тогда в дальнейшем можно объявлять переменные без записи определения класса и без служебных слов class или struct, как показано выше. Объявленные переменные подчиняются правилам видимости, как и переменные встроенных типов, и время их жизни зависит от места объявления.
Следующие переменные могут быть объявлены для приведенных в листинге классов:
NullType a. *pb; // скалярная переменная и указатель
Empty d[10]; // массив
date *pd: // указатель
class Money t: // скалярная переменная
class Money *p; // указатель
class Money m[100]; // массив
XXX YYY; // скалярная переменная
Library L[10]. *pl : // массив и указатель
class Class { /*... */ } // определение класса
vl. v2[20]; // скалярная переменная и массив
Переменным vl и v2 присваивается тип Class, после чего для объявления других переменных достаточно указания типа Class, например
Class v3. v4[10]:
Переменную можно инициализировать другой переменной того же класса. Разрешается объявлять и ссылки на объекты с обязательной инициализацией.
Money х = t; // инициализация переменной
date y(d); // инициализация переменной
date &u = у; // обязательная инициализация ссылки
Если поля открыты, разрешается обычная инициализация полей инициализатором структуры, например
class Person
{public: string Fio; double Summa;};
Person Kupaev - {"Купаев М.", 10000.00};
Указатели могут быть инициализированы так же, как и указатели на переменные встроенных типов:
Money *pt = new Money,*pp =pt,*ps; // объявление указателей
ps = new TMoney; // и создание объектов
date *pd = new date(), *pr; // объявление указателей
pr = new date(); // и создание объектов
Форма со скобками после типа выполняет обнуление полей динамического объекта.
Объекты класса разрешается определять в качестве полей другого класса:
class Count
{Money Summa; // сумма на счете
unsigned long NumberCount; // номер счета
date D; // дата открытия счета
public:
void Display(); // вывод на экран
};
Использование объекта в качестве поля другого класса называется композицией.
Объекты класса можно передавать в качестве аргументов любыми способами (по значению, по ссылке, по указателю) и получать как результат из функции:
Money AddMoneyCconst Money &a, const Money &b); // по константной ссылке
Money Init(const long double &r); // возврат значения
void fKdate t); // по значению
void f2(date &t); //по ссылке
void f3(date *t); // по указателю
Функция, возвращающая объект класса, может быть использована для инициализации переменной класса:
Money t = Init(200.56); Money r = AddMoney(x.y);
Можно объявлять объекты-константы класса с обязательной инициализацией:
const Money k – р;
const date d(t);
const Money t = Init(200.50);
Доступ к открытым полям выполняется обычными для структуры способами:
объект.поле указатель->поле;
Вызов открытых методов осуществляется аналогично:
объект.метод(параметры);
указатель->метод (параметры);
Полезным является метод преобразования полей класса в строку toString() для последующего использования этой строки в других методах, например для вывода. Для работы со строками необходимо подключить стандартный заголовочный файл:
#include <string>
Для показанного выше класса time самая скромная реализация может выглядеть следующим образом:
std::string time::toString()
{std::string s = ""; // строка-результат
Std::string Digits = "0123456789": // цифры для результата
unsigned char dl,d2; // выделенная цифра
// формируем часы в строку
dl = hours/10; d2 = hours%10; // получаем цифры часов
s=s+Digits[dl]; // прицепляем старшую цифру
s=s+Digits[d2]; // прицепляем младшую цифру
s+="."; // завершение подстроки
// формируем минуты в строку
dl = minutes/10; d2 = minutesu%10; // вычисляем цифры минут
s=s+Digits[dl]; s=s+Digits[d2];
// формируем секунды в строку
dl = seconds/10; d2 = seconds%10; // получаем цифры секунд
s=s+Digits[dl]; =s+Digits[d2];
return s;
}
Метод возвращает текущее значение полей класса time в виде строки «чч.мм.сс».