Оглавление
ВВЕДЕНИЕ_ 2
1 ПОСТАНОВКА ЗАДАЧИ_ 4
2 СРЕДСТВА ЯЗЫКА СИ++ ДЛЯ РЕАЛИЗАЦИИ ЗАДАЧИ_ 5
2.1 Объявление и использование классов в Си++_ 5
2.2 Перегрузка функций и операторов в Си++_ 15
2.3 Наследование в Си++_ 19
2.4 Файловый ввод-вывод в Си++_ 22
2.5 Шаблоны классов в Си++_ 25
3 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ_ 27
3.1 Классы и алгоритмы работы методов_ 27
3.2 Алгоритм работы главной программы_ 29
3.3 Описание структуры файла данных_ 30
4 ТЕСТИРОВАНИЕ ПРОГРАММЫ__ 33
ЗАКЛЮЧЕНИЕ_ 35
ЛИТЕРАТУРА_ 36
ПРИЛОЖЕНИЕ А_ 37
ПРИЛОЖЕНИЕ Б_ 38
ПРИЛОЖЕНИЕ В_ 39
ПРИЛОЖЕНИЕ Г_ 40
Переопределение префиксных и постфиксных операторов:
BigInt & operator --(BigInt & n);//Префиксный
BigInt operator --(BigInt & n, int);//Постфиксный
Фактически параметра size_t size у операции нет — он фиктивен. Это хак для того чтобы внести различия в сигнатуры
Переопределение операторов внутри класса:
class BigInt
{
...
BigInt * operator ->();
char operator [](size_t i) const;
char & operator [](size_t i);
...
};
При переопределении "->" необходимо вернуть именно указатель на объект.
Оператор "[]" переопределен как константный и не константный. Во втором случае мы возвращаем ссылку на объект, а не сам объект. Это может быть полезно при определении массивов.
Для перегрузки оператора "=" есть специальная идиома, которая облегчает присваивание сложных объектов.
Рассмотрим следующий код:
class BigInt
{
size_t size_;
char * digits_;
BigInt(BigInt const & num)
{
...
}
void swap(BigInt & b)
{
std::swap(size_, b.size_);
std::swap(digits_, b.digits_);
}
BigInt & operator = (BigInt const & num)
{
if(this != &n)
{
BigInt(num).swap(*this);
}
return *this;
}
...
};
2.3 Наследование в Си++
Наследование представляет собой способность производного класса наследовать характеристики существующего базового класса. Простыми словами это означает, что, если у вас есть класс, чьи элементы данных или функции-элементы могут быть использованы новым классом, вы можете построить этот новый класс в терминах существующего (или базового) класса. Новый класс в свою очередь будет наследовать элементы (характеристики) существующего класса. Использование наследования для построения новых классов сэкономит значительное время и силы на программирование. Объектно-ориентированное программирование широко использует наследование, позволяя вашей программе строить сложные объекты из небольших легко управляемых объектов. Цель объектно-ориентированного программирования состоит в повторном использовании созданных классов, что экономит ваше время и силы. Если уже создали некоторый класс, то возможны ситуации, что новому классу нужны многие или даже все особенности уже существующего класса, и необходимо добавить один или несколько элементов данных или функций. В таких случаях C++ позволяет строить новый объект, используя характеристики уже существующего объекта. Другими словами, новый объект будет наследовать элементы существующего класса (называемого базовым классом). Когда строите новый класс из существующего, этот новый класс часто называется производным классом.
Используя оператор точку, программы могут легко обращаться к элементам базового и производного классов.
В дополнение к общим (public) (доступным всем) и частным (private) (доступным методам класса) элементам C++ предоставляет защищенные (protected) элементы, которые доступны базовому и производному классам.
Для разрешения конфликта имен между элементами базового и производного классов ваша программа может использовать оператор глобального разрешения, указывая перед ним имя базового или производного класса.
Наследование является фундаментальной концепцией объектно-ориентированного программирования..

