Язык С++ для системного программирования. Имена-этикетки. Класс как область действия, страница 4

Для управления распределением динамической памяти С++ предоставляет операторы 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, тоэлементы данных и функции-элементы доступные для функций-элементов данного класса и классов, производных от него.

В С++ структура, класси объединение рассматриваются как типы классов.Структура и класс похожие за исключением доступа по умолчанию.