Для управления распределением динамической памяти С++ предоставляет операторы new и delete (или new[ ], delete[ ]). В программах на языке С использовались для этой цели библиотечные функции malloc( ), calloc( ) и free ( ). Эти функции, как и все функции С, можно использовать и в С++. Однако операторы С++ обладают расширенными возможностями. Так, функции malloc( ), calloc( ) возвращают пустой указатель void*. Поэтому в случае необходимости выделить память под какой-либо тип переменной, отличный от void, в С++ требуется явное преобразование типа. В то же время new возвращает указатель на тот тип, для которого выделяется память. Обращение к оператору new имеет вид:
указатель_на_тип= newтип;
указатель_на_тип= newтип [количество_элементов];
Например:
char*pch;
pch=new char; //Выделение памяти под 1 символ
pch=new char[1Ø]; //Выделение памяти под 10 символов.
Освобождается память с помощью оператора delete.
delete указатель_на_тип;
delete [ ] указатель_на_тип;
Второй вариант вызова delete необходимо использовать при освобождении памяти, выделенной функцией new[ ] под массив.
Примеры:
1)
int*pi=new int;
*pi=124;
delete pi;
2)
struct car
{
- - -
};
car*pcar=new car[1Ø];
/* выделена
память под 10 элементов car */
delete [] pcar; //освободили память
Для сравнения приводится malloc( ) и free( ).
struct flower
{
- - -
};
flower*pflower;
pflower=(flower*)malloc(1Ø*sizeof(flower));
free(pflower);
17.5 Объектно-ориентированное программирование на С++. Классы в С++
Классявляется фундаментальным механизмом,с введением которого язык С получает объектно-ориентованные свойства и становится языком С++. Он разрешает создавать типы и определять поведение типа.
Каждый представитель класса называется объектом. В некотором смысле можно рассматривать класс как средство расширения языка.
Определение класса напоминает определение структуры в С за исключением того,что оно обычно содержит одну или несколько спецификаций доступа с помощью ключевых слов public , protected , private .
Вместо ключевого слова struct могут употребляться classили union .
-Определение классаможет включать в себя функции (функции-элементы или методы) наравне с элементами данных. В нем также могут быть некоторые специальные функции, такие,как конструктор(функция с тем же именем, что и сам класс) и деструктор(функция, именем которой является имя класса с префиксом-тильдой(~)).
Пример
class man
{
private:
char name[10];
char adres[20];
public:
void get_info();
voidput _ info ();
};
В этом примере показано,что, кроме данных о человеке , есть еще две функции для ввода и вывода этих данных:get _ info (), put _ info ().
В языке С элементы структуры доступные для другой функции в границах ее области действия. Это часто приводит к изменению данных из-за невнимательности. В С++ можно ограничить видимость данных и функций класса с помощью меток public , protected , private . Метка-спецификатор доступа применяется ко всем элементам класса, которые следуют за ней, пока не встретится другая метка или закончится определение класса.
Если спецификатор доступа private, это означает, что элементы данных и функции-элементы доступные только для функций-элементов данного класса.
Если public, то элементы данных и функции-элементы доступные для функций-элементов и других функций программы, в которых есть представитель класса.
Если protected, тоэлементы данных и функции-элементы доступные для функций-элементов данного класса и классов, производных от него.
В С++ структура, класси объединение рассматриваются как типы классов.Структура и класс похожие за исключением доступа по умолчанию.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.