BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)

15
BM-104 Nesneye Yönelik Programlama Bahar 2013 (8. Sunu) (Yrd. Doç. Dr. Deniz Dal)

description

BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal). new ve delete Operat ö rleriyle Dinamik Bellek Y ö netimi (Dynamic Memory Management). - PowerPoint PPT Presentation

Transcript of BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)

Page 1: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

BM-104 Nesneye Yönelik Programlama

Bahar 2013(8. Sunu)

(Yrd. Doç. Dr. Deniz Dal)

Page 2: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

new ve delete Operatörleriyle Dinamik Bellek Yönetimi (Dynamic Memory Management)

Dinamik bellek yönetimi programcıya, bellekten dinamik olarak yer ayırmak (allocate) ve kullandıktan sonra ayrılan bu alanı belleğe geri vermek (deallocate) için yardımcı olur. (Hem built-in hem de user-defined veri tipleri için.)

Bu işlemler new ve delete operatörleri yardımıyla gerçekleştirilir.

Bellekte dinamik olarak (boyutu değişken), bir dizi oluşturmak boyutu sabit bir diziyi statik olarak tanımlamaktan birçok kez daha kullanışlıdır.

Page 3: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Dinamik Bellek Yönetimi (devam)

new OperatörüBir sınıfın nesnesi için programın çalışması

esnasında (execution time) (derleme anında (compilation time) değil) nesnenin boyutuna uygun bir alanı bellekte rezerve eder.

Nesnenin yapıcısını çağırır ve ilk değer atama işlemini gerçekleştirir.

Ve son olarak bu nesneye bir pointer atar. Free store ya da heap

Dinamik olarak oluşturulacak nesneler için programın çalıştırılması esnasında kullanılan özel bellek alanıdır.

Page 4: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Dinamik Bellek Yönetimi (devam)

delete OperatörüDinamik olarak heap te oluşturulmuş bir nesneyi yok

eder. Bu işlemi nesnenin yıkıcısını çağırarak gerçekleştirir

ve boşalan alanı heap e iade eder. Belleğin boşaltılan bu alanı başka nesneler tarafından

ya da işletim sistemi tarafından yeniden kullanılabilir. Dinamik olarak oluşturulmuş bir bellek alanını

kullanımı bittikten sonra serbest bırakmamak “memory leak” denen bir probleme sebep olur. Neden?

Page 5: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Dinamik Değişken ve Nesne KullanımıÖrnek :

double *ptr1=new double(3.14159); int *ptr2=new int; *ptr2=16;Zaman *ptr3=new Zaman;Zaman *ptr4=new Zaman(12,45,16);

delete ptr1;delete ptr2;delete ptr3;delete ptr4;

delete operatörü ptr1 pointerının işaret ettiği dinamik bellek alanını yok eder. Pointer değişkenine bu satırdan sonra da new operatörü ile yeni bir dinamik bellek alanı rezerve edilebilir.

Page 6: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Tek Boyutlu Dinamik DizilerDiziler dinamik olarak çalışma esnasında

tanımlanabilirler.Örnek:

Dinamik olarak oluşturulacak ve kullanıcıdan klavye yoluyla temin edilecek diziBoyutu kadar elemanı saklayacak integer bir dizinin deklarasyonu:

1. int *diziPtr=new int[diziBoyutu];2. delete [] diziPtr;

(!! Kare parantezlere dikkat ([])!!) 2 nolu deyim diziPtr adlı dinamik dizinin bellekte tutulduğu alanı

istenildiğinde serbest bırakır. Eğer pointer, içinde nesne tutan bir diziyi işaret ediyorsa önce

dizinin içindeki nesnelere ait yıkıcılar çağrılır ve daha sonra bellek serbest bırakılır.

diziPtr dinamik dizinin ilk elemanını işaret eder. Dizinin ikinci elemanına diziPtr[1] ile veya *(diziPtr+1) ile ulaşılır.

Page 7: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Dinamik Olarak Oluşturulmuş Bir Nesnenin Public Üye Fonksiyonlarına

Veya Public Üye Değişkenlerine Ulaşmak İçin 2 Yol Vardır

Zaman *ptr=new Zaman;

BİRİNCİ YOL: ptr->ZamaniGoster();İKİNCİ YOL :(*ptr).ZamaniGoster();

Page 8: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Uygulama Kullanıcıdan klavye yoluyla temin edeceğiniz integer bir sayıyı

dinamik bir integer dizinin boyutu olarak kullanınız. Bu dizinin içerisini rastgele sayılarla dolduracak Fonksiyon1

adında bir C++ fonksiyonu tanımlayınız. Kendisine parametre olarak aldığı bir tamsayı Leyland Sayısı ise

geriye true değilse geriye false döndüren Fonksiyon2 adında bir C++ fonksiyonu tanımlayınız. 1 < y ≤ x iken xy + yx formunda ifade edilebilen sayılar Leyland Sayıları olarak adlandırılırlar. 8, 17, 100 ve 1124 Leyland Sayılarından birkaçıdır.

Kendisine parametre olarak aldığı bir alt limit ile bir üst limit arasındaki Leyland Sayılarını alt alta basacak Fonksiyon3 adında bir C++ fonksiyonu tanımlayınız.

Dinamik bir integer dizinin içerisindeki Leyland Sayılarını bularak ekrana basacak Fonksiyon4 adında bir C++ fonksiyonu tanımlayınız.

Page 9: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)
Page 10: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)
Page 11: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)
Page 12: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)
Page 13: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)
Page 14: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

İki Boyutlu Dinamik Diziler

Page 15: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

İki Boyutlu Dinamik Diziler