C, PHP, VB, .NET

Дневникът на Филип Петров


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

Задача: Реализирайте функция за сортиране на списъка.

Задача: Да се напише програма, която съставя списък от факултетните номера, имената и оценката на студент и предоставя функционалност за:
– Извежда данните за всички въведени студенти.
– Изтриване на студент по подаден факултетен номер.
– Сортиране на списъка спрямо оценка или спрямо име на студент и съответно извеждането на сортирания списък на екрана.
– Показва средният успех на студентите.

 



2 коментара


  1. По скоро бих помогнал ако ми дадеш код докъде си стигнал и къде е проблема. Да седна да пиша този пример от А до Я… Малко извънреден труд ми идва :) Можеш да ми напишеш e-mail.

  2. nikolai каза:

    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

Добави коментар

Адресът на електронната поща няма да се публикува


*