* Оператори new и delete
Публикувано на 06 ноември 2008 в раздел С/С++.
Както вече споменахме, в обектно-ориентираното програмиране е възможно да създаваме много инстанции на един и същи "модул" (обект). Контролът върху този обект се осъществява чрез операторите new и delete. Обекти, създадени чрез операторът new, се наричат "динамични обекти". Те се разпределят в паметта за динамични обекти (heap). Синтаксисът е следният:
<указател> = new <тип>;
Типа данни на указателя трябва да съвпада с типа данни на обекта, който създаваме. По този начин създаваме нова променлива, която е достъпна чрез указателя. Унищожаването на така създаден обект се осъществява, чрез операторът delete:
delete <указател>;
Пример: Въвеждане на данни в едномерен масив и извеждане на данните му на екрана:
// Брой обекти, които ще създадем int numobjects; cout<<"How many objects do you want: "; cin >> numobjects; int *a = new int[numobjects]; int i; for(i=0; i<numobjects; i++){ cout << "Enter element " << i << ":"; cin>>a[i]; } for(i=0; i<numobjects; i++){ cout << setw(10) << a[i]; } cout<<endl; // Унищожаваме масива от обекти delete [] a;
Пример: Програма, чрез която създаваме едносвързан линеен списък, с възможност да го отпечатваме на екрана:
#include "stdafx.h" #include "iostream.h" struct list{ int k; struct list *next; } *firstelement, *lastelement; void add(){ if (firstelement == 0){ firstelement = new struct list; cout << "Enter value: "; cin >> firstelement->k; firstelement->next = 0; lastelement = firstelement; return; } struct list *newelement = new struct list; cout << "Enter value: "; cin >> newelement->k; newelement->next = 0; lastelement->next = newelement; lastelement = newelement; return; } void show(){ cout << "List of elements" << endl; struct list *p = firstelement; while (p != 0){ cout << p->k << " -> "; p = p->next; } cout << "*" << endl << endl; } void main() { firstelement = 0; int action; do{ cout << "1. Add element" << endl; cout << "2. Show list" << endl; cout << "3. Exit" << endl; cout << "Choose option: "; cin >> action; cout << endl; switch (action){ case 1: add(); break; case 2: show(); break; case 3: break; default: cout << "Invalid option" << endl; } }while (action != 3); }
Задача: Преправете функцията add() така, че да не може да се въвеждат елементи в списъка от по-горния пример с повтарящи се стойности на k.
Задача: Реализирайте функция delete(int z), която изтрива елементът от списъка в по-горния пример, който съдържа стойност k = z
Задача: Реализирайте функция за сортиране на списъка.
Задача: Да се напише програма, която съставя списък от факултетните номера, имената и оценката на студент и предоставя функционалност за:
- Извежда данните за всички въведени студенти.
- Изтриване на студент по подаден факултетен номер.
- Сортиране на списъка спрямо оценка или спрямо име на студент и съответно извеждането на сортирания списък на екрана.
- Показва средният успех на студентите.
По скоро бих помогнал ако ми дадеш код докъде си стигнал и къде е проблема. Да седна да пиша този пример от А до Я... Малко извънреден труд ми идва :) Можеш да ми напишеш e-mail.
zdr.izpitvam zatrudneniq s re6avaneto na poslednata zada4a ot tema operator new i delete- za studentite.bi li mi pratil nqkakav kod za da si pomogna.blagodarq predvaritelno