2. Вызывается компонент-функция ob.print. Выводится текст строки начиная с 6-го символа до конца строки текст "исторический". Затем вместо символа "и" записывается 0 - конец строки, и на новой строке выводится текст с начала строки str1 до признака конца строки (0, записанного нами в str2[0]), т.е. слово "Факультет".
СТАТИЧЕСКИЕ ОБЪЕКТЫ
Рассматривая примеры, мы не заботились о памяти, которую необходимо выделить для определяемых объектов. Тем не менее данные программы работают, если попробовать ввести их исходные тексты и выполнить в одном из компиляторов, например фирмы BORLAND для С++. Объекты, которые мы использовали в программе, являются автоматическими. Память для них выделяется стандартным образом на этапе компиляции. Для каждого объекта использовалась своя копия элементов данных класса.
В случае если возникает потребность в определении некоторых разделяемых данных, которыми бы пользовались совместно все объекты данного класса, можно использовать декларацию (объявление) статических переменных (static).
Пример объявления:
class my_class {my_class * prt;
static my_class my_stat;
};
Такое объявление гарантирует, что будет только один экземпляр переменной my_stat , а не по экземпляру для каждого объявленного объекта.
Так как объявление сделано в шаблоне класса, то чтобы сделать его доступным извне, необходимо объявить его как public и при обращении уточнять именем класса, например:
my_class::my_stat
Переменные, объявленные со спецификатором Static, получают распределение памяти в начале выполнения программы и сохраняются до выхода из нее. При отсутствии явного инициализатора или конструкторов в С++ объекты со статической продолжительностью инициализируются нулем или NULL (для указателей).
Пример использования статических переменных:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
class a1 { public: static int s; static void f1 (void); };
int a1::s=5; //определение статической переменной
void a1::f1 (void) { s+=21; //определение метода
printf("s=%d ; ",s); //вывод значения переменной
getch(); //останов до нажатия клавиши
}
void main(void) { a1::s+=1; //+1 в статическую переменную
a1 ob_a1,ob_a2; / /определяем два объекта класса
a1 ob_a1.f1(); //вызов метода для объекта ob_a1
ob_a1.s+=5; //+5 в статическую переменную
ob_a2.f1(); //вызов метода для ob_2
}
Результат выполнения программы:
s=27 ; s=53 ;
Объяснение выполнения программы дано в комментариях.
ДИНАМИЧЕСКИЕ ОБЪЕКТЫ
Динамические объекты создаются во время выполнения программы с выделением памяти из пула свободной памяти. Такой прием используется, в случае если мы не можем определить объем запоминаемых в памяти данных до начала выполнения программы (работа со списками, записями переменной длины, сложными структурами данных).
В С++ для динамического размещения объектов можно использовать как функции языка С (например malloc), так и свои собственные более мощные операторы. Это операторы new и delete.
Формат их использования:
1) указатель_на_выделенную_память = new имя_типа (инициализирующее значение);
2) delete указатель_на_выделенную_память.
Имя может быть любого типа, кроме функции. Допустимым является указатель на функцию. Инициализирующее значение не является обязательным.
Оператор new выделяет требуемую память и возвращает указатель на ее начало. При ошибке и в случае невозможности выделения нужного объема памяти оператор возвращает значение NULL.
Оператор delete освобождает ранее выделенную оператором new память по заданному указателю на ее начало.
Преимущества операторов new и delete по сравнению с функциями С (типа malloc и free):
1. Оператор new вычисляет размер элемента, для которого необходимо выделить память (нет необходимости использовать операторы определения размера типа sizeof).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.