
- •Структуры
- •Массив структур
- •Указатели на структуру
- •Битовые поля
- •Объединения
- •Перечисления
- •Переименование типов
- •Открытие файла
- •Функции работы с файлами
- •Форматный ввод/вывод
- •Ввод/вывод строк. Функции позиционирования
- •Чтение из двоичного файла и запись в него
- •Свойства ООП
- •1.1 Свойства ООП
- •Понятие класса в С++
- •1.2 Понятие класса С++
- •Создание класса
- •1.3 Создание класса
- •Члены класса
- •1.4 Члены класса
- •Инкапсуляция
- •1.5. Инкапсуляция
- •1.6 Функции-члены класса
- •Реализация понятия «дата» при помощи структуры
- •1.7 Реализация понятия «дата» при помощи структуры
- •Реализация понятия «дата» при помощи класса
- •1.8 Реализация понятия «дата» при помощи класса
- •Определение и вызов функций–членов класса
- •Выводы. Примеры
- •1.9 Выводы
- •1.10 Пример создания класса
- •Конструкторы
- •2.1 Конструкторы
- •2.2 Пример класса без конструктора
- •2.3 Пример класса с конструктором
- •2.4. Конструктор с параметрами по умолчанию
- •2.5. Деструкторы
- •2.6. Пример класса с конструктором и деструктором
- •2.7. Подставляемые или inline функции.
- •2.8. Подставляемые функции-члены.
- •2.9. Указатель this
- •2.10. Использование указателя this
- •Дружественные функции
- •3.1 Дружественные функции
- •3.2 Пример дружественной функции
- •3.3 Дружественные классы
- •3.4. Уточнение имени элемента.
- •3.5. Определение переменных непосредственно перед использованием
- •3.6. Статические элементы класса.
- •2.7. Пример
- •Перегруженные функции
- •4. Перегрузка функций и операций
- •4.1 Полиморфизм
- •4.2 Перегруженные функции
- •4.3 Перегрузка конструктора
- •4.4 Выбор экземпляра функции
- •4.5 Перегрузка стандартных операций
- •4.6 Перегрузка операций сложения и присваивания
- •4.7 Перегрузка операций ++ и --
- •4.8 Дружественные функции-операции
- •4.9 Перегрузка операции индексации []
- •4.10 Аргументы по умолчанию
- •5. Работа с объектами
- •5.1 Ссылки в С++
- •5.2 Передача объектов, как аргументов функции
- •5.3 Массивы объектов
- •5.4 Указатель на объект
- •5.5 Динамическое выделение памяти. Операторы new, delete.
- •5.6 Локальные классы
- •5.7 Вложенные классы
- •5.8 Имена заголовочных файлов в С++
- •5.9 Строковые переменные в С++.
- •6. Наследование
- •6.1 Понятие наследования
- •6.2 Базовые и производные классы
- •6.3 Одиночное и множественное наследование
- •6.4 Управление доступом производных классов
- •6.5 Пример
- •6.6 Конструкторы с параметрами при наследовании
- •6.7 Конструкторы при множественном наследовании
- •7. Виртуальные функции. абстрактные классы
- •7.1 Указатели на производные типы
- •7.2 Виртуальные функции
- •7.3 Пример
- •7.4 Чистые виртуальные функции и абстрактные типы
- •7.5 Виртуальные базовые классы
- •7.6 Шаблоны
- •7.7 Шаблоны функций
- •7.8 Пример
- •7.9 Использование шаблонов с двумя типами параметров
- •7.10 Шаблоны классов
4.9 Перегрузка операции индексации []
Индексация — бинарная операция, где первый операнд — объект класса, второй — целочисленный индекс. Перегрузка операции индексации позволяет работать с элементами объекта vector, как с элементами массива.
#include <iostream>
using namespace std;
class vector {
int v[3];
public:
vector (int a=0, int b=0, int c=0)
{v[0]=a; v[1]=b; v[2]=c;}
vector operator +(vector t);
vector operator =(vector t);
int & operator[](int i);
void show(void);};
vector vector::operator+(vector t)
{vector tmp;
for (int i=0; i<3; i++)
tmp.v[i]=t.v[i]+v[i];
return tmp;}
vector vector::operator=(vector t)
{vector tmp;
for (int i=0;i<3;i++)
v[i]=t.v[i];
return *this;}
int &vector::operator[](int i)
{return v[i];}
void vector::show(void)
{for (int i=0;i<3;i++) cout<<v[i]<<"\n";}
main(void)
{vector v1(1,2,3), v2(10,11,12),v3; v3=v1+v2;
for (int i=0;i<3;i++) cout<<v3[i]<<"\n"; v3.show(); v1[0]=100; v1[1]=201; v1[2]=302; v1.show();}
4.10 Аргументы по умолчанию
Аргументы по умолчанию являются вспомогательным средством, как и перегрузка функций. Обе возможности позволяют использовать одно имя функции в разных ситуациях. Различие состоит в том, что при определении аргументов по умолчанию компилятор сам подставляет аргументы.
Вспомним перегруженные конструкторы в классе data:
date (int a, int b, int c);
date (int a);
date (void);
Все три функции можно заменить одной, если считать, что по умолчанию дата устанавливается 01 января 2000 г.
date (int day=1, int month=1, int year=2000);
В новой версии определения объектов дают одинаковые результаты.
date A(1,1,2000); date B(1); date C();
В обоих случаях вызывается один и тот же конструктор, но для В компилятор автоматически подставляет второй и третий аргумент, для С – все три аргумента. Аргументы по умолчанию и перегруженные функции позволяют использовать одно имя в разных ситуациях. Различие состоит в том, что при определении аргументов по умолчанию компилятор сам подставляет аргументы. Как правило, если поведение функций не сильно отличается, следует использовать значения аргументов по умолчанию.
Используя аргументы по умолчанию, необходимо помнить о двух правилах. Во-первых, значения по умолчанию могут назначаться только для аргументов, завершающих список. Нельзя объявить аргумент по умолчанию, за которым будет следовать аргумент с явно задаваемым значением. Во-вторых, после первого аргумента по умолчанию все последующие аргументы в списке также должны быть аргументами по умолчанию.
Пример.
date D( , ,200); date E(8, , 2018); |
/ выдаёт сообщение об ошибке |