BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 8 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)
description
Transcript of 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)
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.
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.
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?
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.
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.
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();
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.
İki Boyutlu Dinamik Diziler
İki Boyutlu Dinamik Diziler