* Оператори new и delete
Публикувано на 06 ноември 2008 в раздел С/C++.
Както вече споменахме, в обектно-ориентираното програмиране е възможно да създаваме много инстанции на един и същи „модул“ (обект). Контролът върху този обект се осъществява чрез операторите 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
Задача: Реализирайте функция за сортиране на списъка.
Задача: Да се напише програма, която съставя списък от факултетните номера, имената и оценката на студент и предоставя функционалност за:
- Извежда данните за всички въведени студенти.
- Изтриване на студент по подаден факултетен номер.
- Сортиране на списъка спрямо оценка или спрямо име на студент и съответно извеждането на сортирания списък на екрана.
- Показва средният успех на студентите.
2 коментара за “Оператори new и delete”
Пусни коментар
Категории
- Бази от Данни (39)
- Вероятности (30)
- История (14)
- Кучета (67)
- Лада Нива (91)
- Математика (159)
- Методика (52)
- Общи работи (107)
- ПИК-3 Java (38)
- Политика (40)
- Програмни Среди (1)
- ПТСК (37)
- С/C++ (45)
- Семейни (15)
- Физика (35)
- ХHTML/JS (25)
- Храна (11)
Нови
- Как да разрежем хляба?
- Здравей бебе!
- Какво означават метеорологичните кодове?
- Берра проправя пътеки
- Задача от YES
08 април 2010 на 19:08
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
08 април 2010 на 19:20
По скоро бих помогнал ако ми дадеш код докъде си стигнал и къде е проблема. Да седна да пиша този пример от А до Я… Малко извънреден труд ми идва :) Можеш да ми напишеш e-mail.