C++ Veri Türleri ve Polimorfizm

C++ Veri Türleri ve Polimorfizm

C++ programlama dilindeki veri tipleri oldukça önemlidir İlkel veri tipleri, tam sayılar, karakterler ve ondalıklı sayıları ifade etmek için kullanılır Yapı veri tipleri ise bir veya daha fazla ilkel veya yapı veri tipinin bir araya getirilmesiyle oluşturulan veri tipleridir Polimorfizm ise, bir nesnenin farklı şekillerde davranmasını sağlayan bir kavramdır Bu makalede, C++ programlama dilindeki veri tipleri ve polimorfizm kavramı detaylı olarak ele alınmıştır

C++ Veri Türleri ve Polimorfizm

C++ programlama dilinde veri tipleri oldukça önemlidir. Bu makalede, C++ programlama dilindeki farklı veri tipleri ve polimorfizm kavramı ele alınmaktadır. Veri tipleri, programcıların belirli türlerdeki verileri programlarına dahil etmelerine yardımcı olan "etiketler" olarak düşünülebilir. Bu makalede, ilkel veri tipleri (int, char, float, double) ve yapılı veri tipleri (struct ve class) hakkında detaylı bilgi alabileceksiniz.

Polimorfizm, C++ programlama dilinde oldukça önemlidir. Bu kavram, bir nesnenin farklı şekillerde davranmasını sağlar. Bu makalede, polimorfizm kavramının ne olduğu, virtuel fonksiyonlar ve polimorfizm ile örnekleme gibi konular ele alınmaktadır. Bu sayede C++ programlama dilinde polimorfizm kullanan yazılımcılar, daha esnek ve modüler kodlar yazabileceklerdir.


Veri Tipleri

C++ programlama dilinde kullanılan veri tipleri, programlama dilindeki temel yapı taşlarıdır. C++ programlama dilindeki veri tipleri, aşağıdaki başlıklar altında incelenir:

  • İlkel Veri Tipleri
  • Yapı Veri Tipleri

İlkel veri tipleri, programlama dilinde en çok kullanılan veri tipleridir. İlkel veri tipleri arasında tam sayılar, karakterler ve ondalıklı sayılar yer alır. C++ programlama dilinde ilkel veri tipleri aşağıdaki gibidir:

Veri Tipi Boyut (byte) Açıklama
int 2 veya 4 Tam sayıları ifade etmek için kullanılır.
char 1 Karakterleri ifade etmek için kullanılır.
float 4 32-bitlik ondalıklı sayıları ifade etmek için kullanılır.
double 8 64-bitlik ondalıklı sayıları ifade etmek için kullanılır.

Yapı veri tipleri ise, bir veya daha fazla ilkel veya yapı veri tipinin bir araya getirilmesiyle oluşturulan veri tipleridir. Struct ve class yapı veri tiplerine örnek olarak verilebilir. Struct ve class yapı veri tipleri, C++ programlama dilinde oldukça sık kullanılan veri tipleridir.


İlkel Veri Tipleri

C++ programlama dilindeki ilkel veri tipleri, sayılar ve karakterler gibi basit verileri temsil ederler. İlk olarak, int veri tipi tam sayıları ifade etmek için kullanılır. Bu veri tipi, pozitif ve negatif tamsayılar için kullanılabilir. Char veri tipi ise karakterleri ifade etmek için kullanılır ve tek tırnak içinde tanımlanır.

Veri Tipi Boyut (byte) Minimum Değer Maksimum Değer
int 4 -2,147,483,648 2,147,483,647
char 1 -128 127
float 4 1.17549435 × 10^-38 3.40282347 × 10^38
double 8 2.22507 × 10^-308 1.79769 × 10^308

Float ve double veri tipleri, ondalıklı sayıları ifade etmek için kullanılır. Aralarındaki fark, double'ın daha yüksek hassasiyete sahip olmasıdır. C++ programlama dilinde, her bir veri tipi için sınırlar belirlenmiştir ve bu sınırları aşan değerler hata verecektir.


int

Int, tam sayıları ifade etmek için sıklıkla kullanılan bir C++ veri tipidir. Tam sayılar genellikle negatif veya pozitif olabilirler ve ondalık kısımları bulunmaz. İnt veri tipi, int anahtar kelimesiyle tanımlanır ve bellekte 4 bayt yer kaplar. Bu veri tipindeki en küçük değer -2147483648 (-(2^31)) ve en büyük değer 2147483647 ((2^31)-1) olabilir. İnt, C++ dilinde sıkça kullanılan bir veri tipidir ve çeşitli alanlarda kullanılır. Örneğin, sayıların toplanması, çarpılması, bölünmesi vb. işlemleri yapmak için int veri tipi oldukça faydalıdır.

İnt veri tipi, 2'lik, 8'lik, 10'lık ve 16'lık sayı tabanlarında ifade edilebilir. Bu nedenle, C++ programlama dilinde bazı matematiksel işlemler yaparken int veri tipinin belirli boyutlarını kullanmak önemlidir. Veri tiplerinin belirli boyutları, programın doğru çalışmasını sağlamaya yardımcı olur.


char

C++ programlama dili içinde kullanılan char veri tipi, karakterleri temsil etmek için kullanılır. Karakterler, tek tırnak işareti arasında belirtilen harfler, sayılar ya da özel karakterlerdir.

Char veri tipi, 1 byte yer kaplar ve ASCII kodlaması ile karakterleri temsil eder. Örneğin, 'A' karakteri ASCII tablosunda 65 değerini ifade eder. Yani, 'A' karakterini temsil etmek için char veri tipini kullanırız.

Char veri tipi ayrıca kaçış dizileri kullanarak özel karakterlerin temsil edilmesini sağlar. Örneğin, '\n' kaçış dizisi, yeni satıra geçişi ifade eder.

Bir dizi gibi, karakterlerin birden fazla elemanından oluşan bir char dizisi de tanımlanabilir. Bu diziler içinde her bir eleman bir karakterdir. Örneğin, "Merhaba" cümlesi, "char mesaj[]={'M', 'e', 'r', 'h', 'a', 'b', 'a', '\0'};" şeklinde tanımlanabilir. Burada '\0' karakteri, Dizinin sonunu ifade eder.


float ve double

C++ programlama dilinde ondalıklı sayıları ifade etmek için iki farklı veri tipi kullanılır: float ve double. Float, 32 bit uzunluğunda, ±1.18 x 10^-38 ila ±3.40 x 10^38 arası ondalıklı sayıları ifade edebilirken, double 64 bit uzunluğunda ve daha yüksek bir hassasiyete sahip olduğundan ±2.23 x 10^-308 ila ±1.80 x 10^308 arasındaki ondalıklı sayıları ifade edebilir.

Float veri tipi ile double veri tipi arasındaki en belirgin fark, özellikle yüksek hassasiyet gerektiren matematik işlemlerinde performans, bellek ve doğruluk yönlerinden farklılıklar göstermeleridir. İşlem hızı, float veri tipinde daha yüksek olsa da, double veri tipi daha hassas ve doğru sonuçlar verir. Günümüzde birçok işlemci çift hassasiyetli (double precision) aritmetik işlemlerini doğrudan desteklediğinden, çoğu durumda tercih edilen veri tipi double olacaktır.


Yapı Veri Tipleri

C++ programlama dilinde yapı veri tipleri, birden fazla veri tipini tek bir veri tipinde toplamamıza olanak sağlar. Struct ve class yapı veri tiplerine örnek olarak verilebilir.

Struct, farklı tiplerdeki verileri tek bir yapıda toplamak için kullanılır. Yapıda yer alan verilere sırayla erişmek için nokta operatörü kullanılır. Ayrıca struct yapısı için özel bir yapı adı ve değişken adları tanımlanabilir.

Class yapısı ise, özellikle nesne yönelimli programlama için önemlidir. Başka bir deyişle, sınıflar nesnelerin tasarımında kullanılır. Sınıflar, veri alanları (property) ve bu veri alanları üzerinde işlemler yapan fonksiyonları (method) içerir. Sınıfların kullanımı için özel bir yapı adı ve nesne adları tanımlanabilir.

Ayrıca yapı veri tipleri için

    tablosu da oluşturulabilir. Bu tablo, struct ve class yapıları arasındaki farkları daha net bir şekilde gösterir. Tablo içerisinde, struct ve class yapılarının özellikleri ve farkları sıralanır.

    Yapı Veri Tipi Özellikleri Farkları
    struct Farklı veri tiplerini bir arada tutar. Nesne yönelimli programlama için uygun değildir.
    class Veri alanları ve fonksiyonları içinde barındırır. Nesne yönelimli programlama için uygundur.

    Sonuç olarak, yapı veri tipleri programlama dillerinde oldukça önemli bir yere sahiptir. Bu veri tipleri sayesinde birden fazla veri tipini tek bir yapıda toplayarak veri yönetimini kolaylaştırabiliriz. Struct ve class yapısı kullanımı ise özellikle nesne yönelimli programlamada sıkça kullanılmaktadır.


    Struct

    C++ programlama dilindeki yapı veri tiplerinin birisi de struct veri tipidir. Struct, birbirine bağlı verilerden oluşan veri yapıları tanımlamak için kullanılan bir yapılı veri tipidir. Struct veri tipini tanımlamak için struct anahtar kelimesi kullanılır.

    Struct veri tipi, bir veri yapısı tanımlamak için kullanılabilir. Bu veri yapısı içerisinde bir veya birden fazla veri tipi bir arada kullanılabilir. Struct veri tipi, değişkenlerin aynı kategoride gruplandırılması ve daha anlaşılır bir yapı oluşturmak için kullanılan bir araçtır. Bunun yanı sıra, struct veri tipi ile fonksiyonlara da parametre olarak yapı göndermek mümkündür.

    Bir struct tanımlamak için şu şekilde kullanılabilir:

    KodAçıklama
    struct Ogrenci{    int numara;    char ad[20];    char soyad[20];    int sinif;};
    Yukarıdaki kod bloğunda "Ogrenci" isminde bir struct tanımlanmıştır. Bu struct içerisinde "numara", "ad", "soyad" ve "sinif" olmak üzere dört adet değişken tanımlanmıştır.

    Bir struct içerisindeki elemanlara "." işareti ile erişilir. Aşağıdaki örnekte struct elemanlarına erişilirken "." işareti kullanılmıştır:

    KodÇıktı
    #include<iostream>using namespace std;struct Ogrenci{    int numara;    char ad[20];    char soyad[20];    int sinif;};int main(){    Ogrenci ogrenci1;    ogrenci1.numara = 1234;    strcpy(ogrenci1.ad, "Ali");    strcpy(ogrenci1.soyad, "Yılmaz");    ogrenci1.sinif = 3;    cout << "Öğrenci bilgileri" << endl;    cout << "Numara: " << ogrenci1.numara << endl;    cout << "Ad: " << ogrenci1.ad << endl;    cout << "Soyad: " << ogrenci1.soyad << endl;    cout << "Sınıf: " << ogrenci1.sinif << endl;    return 0;}
    Öğrenci bilgileri
    Numara: 1234
    Ad: Ali
    Soyad: Yılmaz
    Sınıf: 3


    Class

    C++ programlama dilinde yapı veri tipi olan class, başka dillere göre daha kapsamlıdır. Class içinde public, private ve protected davranışları belirleyen üyeler bulunur. Class belirli veri tiplerini gruplayıp daha sonra bu veriler üzerinde işlemleri kolaylaştırır.

    Class oluştururken, struct'tan farklı olarak default olarak public erişim belirleyicisi seçilir. Class içindeki private veriler sadece sınıfın kendisi tarafından görülür ve manipüle edilir. Protected üyeler ise sınıfın kendisi ve sınıfın türetildiği alt sınıflar tarafından erişilebilir.

    Örnek bir class yapısı aşağıdaki gibi olabilir:

    class Ogrenci
    - ad
    - soyad
    - numara
    + ogrenciBilgileriGoster()

    Yukarıdaki örnekte, Ogrenci class'ının private olarak ad, soyad, ve numara veri tipleri tanımlandı. Ayrıca public olarak ogrenciBilgileriGoster() fonksiyonu tanımlanarak Ogrenci class'ı hakkında bilgi gösterimi sağlandı. Bu şekilde Ogrenci class'ı oluşturularak öğrenci bilgileri daha verimli bir şekilde kaydedilebilir ve işlemler yapılabilir.


    Polimorfizm

    C++ programlama dilinde polimorfizm kavramı, nesne yönelimli programlama (OOP) teknikleri içinde yer alan önemli bir kavramdır. Polimorfizm, bir nesnenin farklı şekillerde hareket edebilmesini sağlayan bir özelliktir. Bu özellik sayesinde, farklı nesneler aynı işlevi farklı şekillerde gerçekleştirebilir ve tekrar kullanılabilir kod blokları oluşturulabilir.

    Polimorfizm, aynı isme sahip farklı fonksiyonların aynı tip nesnelerle çağrılabilmesini sağlayan bir özelliktir. Bu özellik, programlama dilindeki kalıtım, soyutlama, bağımlılık enjeksiyonu gibi OOP kavramları ile birlikte kullanılarak, yazılımın yeniden kullanılabilirliği, bakımı ve esnekliği artırılabilir.

    Bir nesne yönelimli programda polimorfizm, genellikle sanal fonksiyonlar ve kalıtım mekanizması ile yapılır. Sanal fonksiyonlar, bir ana sınıfın alt sınıflarında farklı şekilde uygulandığında aynı fonksiyon adı ile çağrılabilen fonksiyonlardır. Kalıtım mekanizması ile ise bir alt sınıf, ana sınıfın özelliklerini miras alabilir ve bu özellikleri farklı şekillerde uygulayabilir.

    Polimorfizm, C++ programlama dilinde sıklıkla kullanılan bir kavramdır ve kodun tekrar kullanılabilirliği ve esnekliği için oldukça önemlidir. Doğru şekilde uygulandığında, farklı tipte nesnelerin aynı işlevi farklı şekillerde gerçekleştirmesi mümkün hale gelebilir ve yazılımın yalnızca şimdiki ihtiyaçlar için değil, gelecekteki ihtiyaçlar için de uyarlanabilir hale gelmesi sağlanabilir.


    Virtuel Fonksiyonlar

    C++ programlama dilinde, polimorfizm için kullanılan bir diğer araç, virtual fonksiyonlar olarak da bilinir. Bu fonksiyonlar, temel sınıfta tanımlanır ve alt sınıflar tarafından farklı şekilde uygulanabilir. Bu sayede, aynı fonksiyon farklı alt sınıflar tarafından farklı şekilde işlenebilir.

    Bir sınıfa virtual bir fonksiyon eklemek için, fonksiyonun başına "virtual" anahtar kelimesi eklenir ve işlevin tanımı sınıfın dışına bırakılır. Sanal fonksiyonların ana kullanımı, nesnelerin farklı davranışlarını simüle etmek için izindir. Bu özellik, örnekleme tekniklerinde çok faydalıdır.

    Sanal Fonksiyonlar Görevi
    Sanal Destructorlar Bir sınıfın alt sınıfları, kendi destructorları yerine üst sınıfın destructorunu kullanabilirler.
    Sanal Fonksiyonlar Alt sınıflar, kendilerine özgü bir implementasyon sağlayabilirler.
    Sanal İşlevsel Çağrılar Alt sınıflar, üst sınıfların özelliklerine erişen sanal işlevler kullanabilirler.

    Genellikle sanal fonksiyonlar, bir ana sınıf tarafından tanımlanır ve türetilmiş alt sınıflar tarafından uygulanır. Bu alt sınıflar, ihtiyaçlarına göre sanal fonksiyonları yeniden uygular ve kullanır. Bu özellik, farklı nesnelerin aynı kod temelinde farklı şekillerde işlenebilmesini sağlar.


    Polimorfizm ile Örnekleme

    C++ programlama dilinde polimorfizm ile örnekleme (abstraction), sınıfların birbirlerinin yerine kullanılabilmesi anlamına gelir. Bu sayede, farklı sınıflar aynı arayüzü kullanarak birbirlerinin yerini alabilirler. Bu özellik sayesinde kodlama esnekliği artar ve kodun genişletilmesi daha kolay hale gelir.

    Bir örnek olarak, hayvanlar için bir temel sınıf oluşturulabilir ve bu sınıfın altında köpek ve kedi sınıfları yer alabilir. Bu sınıfların her birinin farklı özellikleri olabilir (örneğin, köpekler havlar, kediler miyavlar) ancak aynı zamanda ortak özellikleri de olabilir (örneğin, hayvanlar yemeğe ve uyumaya ihtiyaç duyarlar). Bu ortak özellikler ise temel sınıfta tanımlanır.

    Polimorfizm ile örnekleme, sınıfların birbirlerinin yerini alması sayesinde kodlama esnekliği sağlar. Örneğin, hayvan sınıfına yeni bir alt sınıf (örneğin, kuş) eklendikten sonra, bu sınıfın da aynı arayüzü kullanarak diğer sınıfların yerine kullanılması mümkün olur. Bu sayede, kodlama süreci daha kolay ve hızlı hale gelir.