ВУЗ:
Составители:
Рубрика:
122
Заметим, что вместо Z = X+ Y + “на велосипеде“ возможна и та-
кая форма обращения к operator +():
Z = operator + (X, Y);
Z = operator + (Z, “ на велосипеде“);
21.2. Операции new и delete при работе
с абстрактными типами
Операции new и delete реализуются через функции и вне зависи-
мости от того, описаны или нет operator new() и operator delete как static,
они всегда являются статическими функциями. Операция new предо-
пределена для любого типа, в том числе и для абстрактного типа, опре-
деленного через механизм классов. Можно переопределять как глобаль-
ную функцию operator new (), так и функцию class x::operator new ().
Глобальные new и delete переопределяются обычным образом через
механизм соответствия сигнатур.
Как и при переопределении глобальной функции operator new (),
переопределенная функция classX::operator new () должна возвращать
результат типа void* , а ее первый аргумент должен иметь тип size_t (то
есть unsigned), в которой хранится размер выделяемой памяти. Замети,
что при использовании операции new этот аргумент не указывается, а
размер необходимого участка памяти вычисляется автоматически исхо-
дя из указанного типа.
21.3. Использование new при создании динамического
объекта абстрактного типа
Рассмотрим фрагмент:
class C{ . . .
public:
C (int arg ){ . . .}
};
. . .
C * cp = new C (3);
Создание динамического объекта типа С можно разбить на две
стадии:
Собственно создание объекта – это выполняет конструктор.
Размещение этого объекта в определенной области памяти – это
делает операция new.
Страницы
- « первая
- ‹ предыдущая
- …
- 118
- 119
- 120
- 121
- 122
- …
- следующая ›
- последняя »
