Ana içeriğe atla

C++'da Sınıf, Kalıtım ve Object Oriented Programming Kavramı

C++' da Nesneye Dayalı Programlamaya(OOP) yönelik bir dildir. C#'da yapısal programlama nedir, nesneye dayalı programlama nedir kısaca açıklamıştık. Bu yazımızda da C++ üzerinden anlatacağız.

Nesneye dayalı progralamada sınıf ve adı üzerine nesne kavramı vardır. Struct yapısını hatırlarsak bize özel değişken tipleri tanımlayabiliyorduk. Öğrenci değişken tipi oluşturup içinde öğrenci bilgilerini tutup hatta fonksiyonlar da yazabiliyorduk. Sınıf kavramı da bu yapıya benzemektedir. Aralarındaki farklar ise şunlardır;


  • Yapılar bir değer türü, sınıflar ise bir referans türüdür. Referans tiplerinin sahip olduğu veriler, belleğin öbek (heap) adı verilen tarafında tutulurken, referansın adı, yığın (stack) adı verilen kısımda tutulur ve öbekteki verilerin bulunduğu adresi işaret eder. Ancak değer türleri, belleğin yığın kısmında tutulur. Sınıflara referans aracılığıyla ulaşılırken, yapılara ise doğrudan ulaşılır. Bu nedenle, yapı kullanımı sınıf kullanımına göre daha az maliyetlidir ve erişim hızı yüksektir. Büyük boyutlarda veriler ile çalışırken, bu veriler sınıf içerisinde tanımlandığında, veri aktarımı anında sadece bu verilerin öbekteki başlangıç adresi aktarılır ve ilgili parametrenin de bu adresteki verilere işaret etmesi sağlanmış olur. Böylece büyük boyutlu verileri yığına kopyalayarak gereksiz miktarda bellek harcanmasının önüne geçilmiş olunur. Ancak küçük boyutlarda veriler ile çalışırken bu verileri sınıflar içerisinde kullandığımızda bu kez de gereksiz yere bellek kullanıldığı için öbek şişer ve performans düşer. Bu konuda 16 byte'tan küçük veriler için yapıların kullanılması, 16 byte'tan büyük veriler için ise sınıfların kullanılması öngörülür.
  • Yapılar için varsayılan bir yapıcı metot (default constructor) yazılmak istendiğinde derleyici hatası alınır. Ancak bu, değişik sayıda parametreler alan yapıcılar yazmamızı engellemez. Sınıflarda ise,  sınıfın varsayılan yapıcı metodu yazılabilir.
  • Bir yapı içersinde yer alan "constructor" metot(lar) içinde tanımlanmış olan alanlara başlangıç değerleri atanmalıdır. Sınıftaki "constructor"(lar) içinde kullanılan alanlara başlangıç değerleri atanmaz ise, derleyici bu atamayı otomatik olarak yapar. Ancak derleyici aynı işi yapılarda yapmaz. Bu nedenle bir yapı içinde kullanılan "constructor"(lar)daki tanımlanmış olan alanlara mutlaka ilk değerlerin verilmesi gerekir.
  • Bir sınıf oluşturulduğunda, bu, başka bir temel sınıftan kalıtım yolu ile türetilebilir ancak bir yapı başka bir yapı temel alınarak türetilemez.
C++'da nesne çağrımı syntax olarak;

nesne *deneme=new nesne(); olarak yapılmaktadır.

Eğer sınıftan ulaşacağımız değişken pointer ise;

deneme->a; değilse deneme.a diye çağrılır.

Kalıtım kavramından da bahsederek yazımızı noktalayacağız. Kalıtım, sınıflar arası biribirinden miras alma olayına dayanır. Kalıtım alınan sınıfın private değişken ve metotları hariç diğer değişken ve metotlarına erişebilir ve işlemlerimizi gerçekleştirebiliriz. protected belirteci ile yazdığımız değişkenler ve metotlar ise sadece kalıtım alınan sınıfta çalışır diğer sınıflarda ve ana sınıf ya da main metodunda erişim sağlanmaz.

Bir dahaki yazımızda görüşmek üzere. :)

Yorumlar

Bu blogdaki popüler yayınlar

Algoritma Kavramı, Sözde Kod ve Akış Diyagramı

Bu yazımda çoğumuzun amelelik gibi gördüğü fakat belki de en önemli konu hakkında kısaca bilgi vermek istiyorum. Bundan sonra küçük örneklerle kod yazmayı arttıracağız. Programlama dillerinden bahsetmiştik geçenlerde. Yüksek seviyeli veya düşük seviyeli diller olsun hepsinin arasında kullanım farkları haricinde çok bir farkılılık yoktur. Hayatımızda kullandığımız koca koca programları, programlama dilleri değil onları hazırlayan algoritma kaynağı oluşturur. Kısaca algoritma kavramını tanımlarsak; Algoritma, belli bir problemi çözmek veya belli bir amaca ulaşmak için çizilen yoldur. Algoritma proglamlamada kullanılan en güzel tekniktir. Neyi nasıl yapacağımızı planlamamızı sağlar. Algoritmayı oluşturanda sözde kod ve akış diyagramlarıdır. ALGORİTMA ÖRNEĞİ(resim1) Sözde Kod:Yapacağımız algoritmayı kısa olarak sözle tanımlama yöntemidir. Örneğin; İki sayının toplamını veren algoritmanın sözde kodunu yazınız. 1)BAŞLA 2)YAZ(“1.sayiyi giriniz:”) 3)OKU(S1) 4)YAZ(“2.sayiyi g...

Örnek Algoritmalar ve Örnek C++ Kodları

Örneklerimize bu başlığımız altında devam ediyoruz arkadaşlar. :) Yıl başına kadar C++ hakkında bildiğim tüm konuları ve yaptığım projeleri sizlerle paylaşacağım. Sorularınızı yorumlarda bekliyorum. Şimdiden kolay gelsin :) Algoritma 5: Yarıçapı klavyeden girilen kürenin yüzey alanını ve hacmini açıklayan algoritmanın C++ kodunu yazınız.(π=3) #include <iostream> using namespace std; int main() { float r,alan,hacim; cout<<“Yaricapi giriniz:”; cin>>r; alan=4*3*r*r; hacim=(4*3*r*r*r)/3; cout<<“Alan:”<<alan<<endl; cout<<“Hacim”<<hacim<<endl; } Algoritma 6: Katsayıları klavyeden girilen birinci dereceden denklemin kökünü bulan algoritmanın C++ kodunu yazınız. #include <iostream> using namespace std; int main() { int a,b,c,x; cout<<“Katsayilari giriniz:”; cin>>a>>b>>c; x=(c-b)/a; cout<<“Kok:”<<x; } Algoritma 7:Klavyeden yarıçapı ve dilim açısı girilen daire diliminin...

Hayatımıza Birbirinden Farklı Çözümler Sunan Problemler: Algoritmalar

Merhaba arkadaşlar, Başlıktandan anlayacağınız gibi, hayatımıza birbirinden farklı çözümler sunan problemler topluluğu olarak algoritmayı tanımlayabilirim. Bu yazı serimizde algoritmaları tek tek tanıyıp çalışma mantıklarını inceleyen analiz eden, birden farklı çözümleri karşılaştırarak gerekirse kendimizde çözümler üretebileceğimiz bir seri yaratacağız. Algoritmalar bilmece bulmaca gibidir. Üzerinde düşündüğünde ufkunuzu açar. Bu seriyi hazırlama sebebimde ufkunuzu biraz olsun açmak oldu. Bu seriye başlamadan önce bir algoritmayı tanımlarken kullanacağımız terimleri tanıtmak istiyorum. Ayrıca algoritmaların pseudo kodlarıyla Java kodlarını da paylaşacağım. Belki Swift ile olan kodlarını da paylaşabilirim. ;) Ayrıca bu kodların toplu halde github hesabımdan erişim sağlayabilirsiniz. Şimdi algoritma dünyasını daha derinden tanıyalım. Algoritma nedir? Bir problemi çözmek için işlenen komutlar kümesine, algoritma nedir. Çözülebilir Problem nedir? Bir problem için algoritma oluşt...