Объектно-ориентированное программирование — Операторы динамического распределения памяти
- Объектно-ориентированное программирование
- Локальные и глобальные переменные
- Подпрограммы и их аргументы
- Определение данных
- Операторы динамического распределения памяти
- Перегрузка функций и операций
- Правила составления перегружаемых функций и операций
- Класс как обобщение структуры
- Определение первичного класса
- Перегрузка операций
- Конструкторы
- Список инициализации
- Деструктор
- Дружественные классы
- Статические элементы класса
- Шаблоны функций
Для выделения и освобождения памяти в Си++ можно применять новые унарные операции — new и delete, соответствующие функциям malloc и free в Си.
Формат операций:
· newTYPE Выделяет область памяти для переменной типа TYPE и возвращает его адрес.
· newTYPE (значение) Действует как предшествующая операция и инициализирует область памяти начальным значением.
· newTYPE [n]Выделяет область памяти для массива из n элементов и возвращяет его адрес.
· deletepОсвобождает область памяти, на которую ссылается указатель p.
· delete []pОсвобождает область памяти, занятую массивом, на который ссылается указатель p.
Пример. Приведём подпрограмму конкатенации строк, возвращающую адрес строки, полученной объединением двух строк.
// peregr.cpp
#include //библиотека ввода-вывода
#include //консольный ввод-вывод
#include //библиотека функций для работы со строками
char* conc(char* s, char* t)
{
int i;
char *res=new char[strlen(s)+strlen(t)+1]; //результирующая строка
for (i=0; i
res[i]=s[i]; //копируем в результат сначала
//первую строку
for (i=strlen(s); i
res[i]=t[i-strlen(s)]; //а затем вторую
res[i]=0; //строка должна завершаться нулём
return res;
}
void main()
{
char* p="abc",*q="1234"; //объявим две строки p и q
clrscr();
cout<<"Входные данные:\nПервая строка "<
cout<<"\nВторая "<
cout<<"\n\nВыходные данные:\n";
cout<<"Результат конкатенации первой и второй строки ";
cout<
//"abc1234"
cout<<"Результат конкатенации первой второй и снова первой строк ";
cout<
//и p — "abc1234abc"
getch(); //ожидание нажатия клавиши
}
Результаты работы программы представлены на рис. 1.1.
Подпрограмма conc() учитывает, что размер строки, полученной после объединения двух строк, равен сумме размеров этих строк. Здесь функция strlen() - стандартная и возвращает количество первых символов строки, не равных 0. Длина строки, вместе с завершающим ее нулем, равна strlen()+1. В данном примере сначала переписываются символы первой строки в результирующую строку res, а затем символы второй строки. В конце строки добавляется 0. Возвращается указатель на результирующую строку res.
Замечание. В рассмотренном примере вывод производится с помощью операции cout<<данные. Аналогичным образом в Си++ можно осуществлять ввод: cin>>данные. Например, вместо операторов:
Scanf(“%d”,&x); printf(“\nx=%d”,x);
для переменной x целого типа, можно написать:
cin>>x; cout<<”\n”<
указав в начале программы #include <iostream.h>. Отметим, что ввод с помощью cin отличается тем, что не требуется символ &.