1 / 15

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

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).

porter
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. BM-104 Nesneye Yönelik Programlama Bahar2013 (8. Sunu) (Yrd. Doç. Dr. Deniz Dal)

  2. new ve delete Operatörleriyle Dinamik Bellek Yönetimi (Dynamic Memory Management) • Dinamik bellek yönetimi programcıya, bellektendinamik olarak yer ayırmak (allocate) vekullandıktansonraayrılan bu alanı belleğe gerivermek (deallocate) için yardımcıolur. (Hem built-in hem de user-defined veritipleriiçin.) • Bu işlemlernewvedeleteoperatörleri yardımıyla gerçekleştirilir. • Bellekte dinamikolarak(boyutu değişken), birdizioluşturmakboyutusabitbirdiziyistatikolarak tanımlamaktanbirçok kezdahakullanışlıdır.

  3. Dinamik Bellek Yönetimi (devam) • newOperatörü • Birsınıfınnesnesiiçin programın çalışmasıesnasında (execution time) (derleme anında(compilation time) değil) nesneninboyutunauygunbiralanıbellekterezerveeder. • Nesnenin yapıcısınıçağırır ve ilk değeratamaişleminigerçekleştirir. • Ve son olarakbunesneyebir pointer atar. • Free store ya da heap • Dinamikolarakoluşturulacaknesneleriçinprogramın çalıştırılmasıesnasındakullanılanözel bellek alanıdır.

  4. Dinamik Bellek Yönetimi (devam) • deleteOperatörü • Dinamikolarakheapteoluşturulmuşbir nesneyiyokeder. • Bu işlemi nesnenin yıkıcısınıçağırarakgerçekleştirir ve boşalanalanıheap e iadeeder. • Belleğin boşaltılanbualanıbaşkanesnelertarafındanya da işletimsistemitarafındanyenidenkullanılabilir. • Dinamikolarakoluşturulmuşbirbellekalanınıkullanımıbittiktensonraserbest bırakmamak“memory leak” denenbirproblemesebepolur. Neden?

  5. Dinamik Değişken ve Nesne Kullanımı • Örnek : • double *ptr1=new double(3.14159); • int*ptr2=newint; *ptr2=16; • Zaman *ptr3=newZaman; • Zaman *ptr4=newZaman(12,45,16); • delete ptr1; • delete ptr2; • delete ptr3; • delete ptr4; deleteoperatörü ptr1pointerı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.

  6. Tek Boyutlu Dinamik Diziler diziPtrdinamik dizinin ilk elemanını işaret eder. Dizinin ikinci elemanına diziPtr[1] ile veya *(diziPtr+1) ile ulaşılır. • Dizilerdinamikolarakçalışmaesnasında tanımlanabilirler. • Örnek: • Dinamikolarakoluşturulacakve kullanıcıdan klavye yoluyla temin edilecek diziBoyutu kadar elemanısaklayacakinteger bir dizinindeklarasyonu: • int *diziPtr=new int[diziBoyutu]; • delete [] diziPtr; (!! Kareparantezleredikkat([])!!) • 2 noludeyimdiziPtradlıdinamik dizininbellektetutulduğu alanıistenildiğinde serbest bırakır. • Eğer pointer, içindenesnetutanbirdiziyiişaret ediyorsaöncedizininiçindekinesnelereait yıkıcılarçağrılır vedahasonrabellekserbest bırakılır.

  7. DinamikOlarak 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();

  8. 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.

  9. İki Boyutlu Dinamik Diziler

  10. İki Boyutlu Dinamik Diziler

More Related