
- •Основные теоретические сведения Объявление базового класса
- •Конструкторы и деструкторы
- •Объявление производных классов
- •Перегрузка операций
- •Ключевое слово this
- •Операторы new и delete.
- •Потоки Выходной поток
- •Встроенные типы.
- •Форматированный вывод.
- •Манипуляции.
- •Определенный пользователем вывод.
- •Входные типы, определенные пользователем.
- •Простой файл Ввод/Вывод.
- •Ход работы
- •Задание
- •Варианты задания (лр№3)
- •Литература
Ключевое слово this
Нестатические функции-элементы воздействуют на объект типа класс, с которым они вызваны. Например, если х - это объект класса Х и f - это функция-элемент Х, то вызов функции х.f() воздействует на х. Аналогично, если xptr - это указатель на объект Х, вызов функции xptr->f() воздействует на *xptr. Но откуда f знает на какой х воздействовать? C++ предоставляет с f указатель на х, называемый this. this передается как скрытый аргумент во всех вызовах нестатических функций элементов.
Ключевое слово this - это локальная переменная, доступная в теле любой нестатической функции-элементе. this не нужно объявлять и она редко явно используется в определении функции. Однако она используется неявно внутри функции при ссылках к элементам. Если вызывается х.f(y), где y - это элемент Х, this устанавливается в &x и y устанавливается в this->y, что эквивалентно x.y.
Операторы new и delete.
Операторы new и delete выполняют динамическое распределение и освобождение памяти аналогично стандартным библиотечным функциям malloc и free.
Упрощенный синтаксис
указатель-на-имя = new имя <инициализатор>;
delete указатель-на-имя;
имя может быть любого типа, за исключением "функция, возвращающая ..." (однако указатель на функцию разрешен).
new создает объект типа "имя", распределяя (если возможно) sizeof(имя) байт в свободной памяти (так же называемой куча). Время действия нового объекта начинается с точки создания и заканчивается или по освобождению этой памяти оператором delete, или окончанием программы.
При успешном выполнении new возвращает указатель на новый объект. NULL указатель говорит об ошибке (такой, как недостаток или фрагментированность памяти кучи). Как с malloc Вам требуется проверять указатель на NULL до работы с новым объектом. Однако в отличие от malloc new вычисляет размер "имя" без явного использования оператор sizeof. Более того, указатель, возвращаемый new, имеет правильный тип "указатель на "имя"" и явное приведение типа не требуется.
Пример:
name *nameptr; // name - любой нефункциональный тип
...
if (!(nameptr = new name)) {
errmsg("недостаточно памяти для имени");
exit (1);
}
...
delete nameptr; // разрушает name и освобождает sizeof(name) байт
Примечание. new, являясь ключевым словом, не требует прототипа.
Потоки Выходной поток
Выходной поток связан с оператором вывода <<. Стандартный оператор сдвига влево << перегружен для операций вывода. Его левый операнд - это объект типа класс ostream. Его правый операнд - это любой тип, для которого был определен выходной поток (то есть встроенный тип или любой тип, для которого была перегрузка).
Пример:
cout<<"Hello!\n";
выводит "Hello!" в cout (стандартный выходной поток, обычно экран).
Оператор << возвращает ссылку на объект ostream, для которого он вызван. Это позволяет использовать несколько каскадных вставок:
void function_display(int i, double d)
{
cout << "i=" << i << ", d=" << d << "\n";
}
на стандартный вывод будет выведено подобное
i = 8, d = 2.34