Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Самоучитель С++ - Шилдт Г.

Шилдт Г. Самоучитель С++ — Спб.: БВХ-Петербург, 2003. — 688 c.
ISBN 5-7791-0086-1
Скачать (прямая ссылка): samouchitelc2003.djvu
Предыдущая << 1 .. 32 33 34 35 36 37 < 38 > 39 40 41 42 43 44 .. 206 >> Следующая

Глава 4. Массивы, указатели и ссылки______________________________________________________121
int getjproduct () { return i*j; }
t;
int main ()
f
samp *p;
p = new samp; // выделение памяти объекту if(Ip) {
cout << "Ошибка выделения памяти\п1Т; return 1;
г-> ’J(4, 5) ;
„oat « "Итог равен:" « p->get_product () << "\n"; return 0;
J
1. Напишите программу, в которой оператор new используется для динамического размещения переменных типа float, long и char. Задайте этим динамическим переменным значения и выведите эти значения на экран. В завершение с помощью оператора delete освободите всю динамически выделенную область памяти.
2. Создайте класс для хранения своего имени и номера телефона. Используя оператор new, динамически выделите память для объекта этого класса и введите имя и телефон в соответствующие поля внутри объекта.
3. Какими двумя способами оператор new может известить вас о неудачной попытке выделения памяти?
4.5. Дополнительные сведения об операторах new и delete
В этом разделе обсуждаются два дополнительных свойства операторов new и delete. Во-первых, динамически размещаемому объекту может быть присвоено начальное значение. Во-вторых, можно создавать динамически размещаемые массивы объектов.
Вы можете присвоить динамически размещаемому объекту начальное значение, используя следующую форму оператора new:
p-var = new type (яа«альнов_зна«ение);
122
Самоучитель C++
Для динамически размещаемого одномерного массива используйте такую форму оператора new:
p-var = new type [size];
После выполнения этого оператора указатель p-var будет указывать на начальный элемент массива из size элементов заданного типа. Из-за разных чисто технических причин невозможно инициализировать массив, память для которого выделена динамически.
Для удаления динамически размешенного одномерного массива вам глсдуег использовать следующую форму оператора delete:
delete [] p-var;
При таком синтаксисе компилятор вызывает деструктор для каждого элемента массива. Это не приводит к многократному освобождению памяти по адресу, обозначенному указателем p-var, она освобождается только один раз.
Для устаревших компиляторов в операторе delete было необходимо указывать в квадратных скобках размер освобождаемого массива. Так требовало исходное определение C++. В современных компиляторах задавать размер массива не нужно.
1. В следующей программе выделяется и инициализируется память для хранения целого:
// Пример инициализации динамической переменной #include <iostream> using namespace std;
int main()
і Примеры J
int
p = new int (9); // задание начального значения равного 9
cout << "Ошибка выделения памяти\п'г;
return 1;
cout << "Это целое, на которое указывает р: " << *р << "\п";
Глава 4. Массивы, указатели и ссылки____________________________________________123
delete р; // освобождение памяти
return 0;
Как и следовало ожидать, программа выводит на экран число 9, являющееся начальным значением переменной, на которую указывает указатель р.
2. Следующая программа инициализирует динамически размещаемый объект:
// Динамическое выделение памяти объектам #include <iostream> using namespace std;
class samp { int i, j; public:
samp (int a, int b) { і = a; j = b; } int get product () { return i*j; }
};
int main ()
(
samp *p;
p = new samp (6, 5); // размещение объекта с инициализацией
cout << "Ошибка выделения памяти\пм; return 1;
}
cout « "Итог равен:” << p->get product {) « "\пи;
delete р; return 0;
і
При размещении объекта samp автоматически вызывается его конструктор, и объекту передаются значения 6 и 5,
3. В следующей программе размещается массив целых:
// Простой пример использования операторов new и delete #include <iostream> using namespace std;
int main (}
1
int *p;
p = new int [5]; // выделение памяти для 5 целых
124
Самоучитель
C++
/ / Убедитесь, что память выделена iff!р) !
cout << "Ошибка выделения памяти\п’* ; return 1;
}
int і;
for (1=0; L<z; i-i—) pl-1] = "1;
zcrC-^Oj i<~Ji i+-^l f
colli: « "'Это іі€?лсіег на которое указывает РI " << _ « 11 і :
COLL << р [ і ! << и\Гі";
і
delete [] р; // освобождение памяти return 0;
Эта программа выводит на экран следующее:
Это целое, на которое указывает р [ 0] : О
Это целое, на которое указывает р[1]: 1
Это целое, на которое указывает р[2]; 2
Это целое, на которое указывает р Г 3] : 3
Это целое, на которое указывает р[4]: 4
4. В следующей программе создается динамический массив объектов:
// Динамическое выделение памяти для массива объектов #include <io$tream> using namespace std;
Предыдущая << 1 .. 32 33 34 35 36 37 < 38 > 39 40 41 42 43 44 .. 206 >> Следующая