* Оператори 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