Объектно-ориентированное программирование — Операторы динамического распределения памяти

Операторы динамического распределения памяти

Для выделения и освобождения памяти в Си++ можно применять новые унарные операции — 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(); //ожидание нажатия клавиши

}

clip_image002

Результаты работы программы представлены на рис. 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 отличается тем, что не требуется символ &.

Вы здесь: Главная Информатика Программирование Объектно-ориентированное программирование