C++ Diline Giriş (Bölüm 2)

Bu yazımızda yine C++ dili için temel teşkil eden bazı başlıklara değinecek, bu programlama dilinde ilerlemek için bilinmesi mutlaka gerekli bazı bilgilere yer vermeyi sürdürüyoruz.

Bu yazımızda yine C++ dili için temel teşkil eden bazı başlıklara değinecek, bu programlama dilinde ilerlemek için bilinmesi mutlaka gerekli bazı bilgilere yer vermeyi sürdürüyoruz.

Tam Sayı Tipleri

C++ üç değişik tam sayı tipine sahiptir: short, int ve long. Her tam sayı tipinin (önceden belli olan) boyutu, ikilik düzende belli bir basamak sayısı sınırı oluşturur.

Tam sayı tiplerinin bu üst ve alt sınırları, kullandığımız bilgisayarın işlemcisi, işletim sistemi, derleyici gibi birçok kritere bağlıdır.


Shrt_max 32767

Shrt_min -32768

Ushrt_max 655535

İnt_ max 32767

İnt _min -32768

Uint_max 65535

LONG_MAX 2147483647

LONG_MİN -2147483648

ULONG_MAX 4294967295



Bu değerler her tip için en büyük ve en küçük değerleri göstermektedir. Bir tam sayının başına UNSİGNED(işaretsiz) sözcüğünü koyarak kullanarak olursak, negatif değerler almayacağınız belirtmiş
olduğumuz yeni bir tip elde etmiş oluruz.

Eğer tamsayıların ikilik düzendeki tutuluşlarına doğrudan erişmek ve bunu kendiniz yorumlamak zorunda kalırsanız, derleyicinizin el kitaplarına bakmanız önerilir.

Görüldüğü gibi tamsayı tiplerinin uzunlukları, yani basamak sayıları, sınırlaı ile ilgili önemli bir bilgi vermektedir. Bu boyutları sizeof sizeof tıpkı + - gibi bir işlemi simgelemektedir ve Sizeof () biçiminde kullanılmaktadır.

Karakter Tipleri

C++ ekrana ya da bir kaynağa yazı yazarken kullanabileceğimiz üç çeşit karakter tipi sunmaktadır: schar, char ve wchar.

Bu tiplerin unsigned olanları da vardır. Ancak genel amaçlı olarak sadece char tipini kullanıyoruz. Ascıı tablosundaki 255 karakter dışındaki karakterleri (örneğin Japonca karakterler) kullanmak için ise wchar kullanılır.

Gerçek Sayı Tipleri

Gerçek sayı tipleri float double, long double'dır. Standart gerçek
sayı tipi olarak double kullanılır.

Bu tip genellikle ıeee64 bit standardına uygun olarak düzenlenir. Yani 64 basamakta saklanır. Long double tipi sadece yüksek kesinlik isteyen bilimsel ve mühendislik uygulamalarında kullanılır. Bu tiplerin boyutlarını öğrenmek için de sizeof işlemini kullanabilirsiniz.

Belli bir tipten bir değişken, beklenen bir yerde tip bilgisi olmayan bir sabit olduğu zaman, bu sabit o tipte yorumlanmaya çalışılır buna kendiliğinden tip dönüşümü adı verilir.

Bir veri kaybı söz konusu olabilir.Ancak programcı bu dönüşümü açıkça belirtecek olursa,yani belirtilmiş tip dönüşümü yaparsa;


İnt i =(int ) d;



Bu, satır artık sadece bir uyarı verecektir, belirtilmiş tip dönüşümleri dikkatli yapılması gereken şeylerdir.

İşaretçi Tipleri

İşaretçiler,özellikle C'nin en önemli ve aynı zamanda en kolay hata yapılabilen kısmıdır.

C++ ile birlikte, işaretçilere alternatif yollar da eklenmiştir. Bu
işaretçi aşağıdaki gibi tanımlanır;


<Veri tipi * <işaretçi adı>;



Referans Tipleri

C++ işaretçileri alternatif olarak getirdiği diğer yol referans tipleridir.Tanım aşağıdaki gibidir:


<Tip Adı> & < Referans Adı> =

< Değişken Adı>;



Sözcükleri Tarif Et

C ve C++'da birçok dilde olan sözcük (string) tipi doğrudan sağlanmamıştır.

"Merhaba" bir sözcük sabiti olarak karşımıza çıkmaktadır. Bunu çeşitli biçimlerde kullanabiliriz;


Char *p="merhaba";

Cout <<*p;



Satırlarının çıktısı; Merhaba'dır.

Bir sözcüğe karakter işaretçisi ile erişebilmekteyiz. Ancak C ve C++'ın ayrım gösterdiği bir nokta bulunmaktadır. C'de yukarıdaki tanıma göre p işaretçisini kullanarak sözcüğü değiştirebilmekteyiz. C++'da ise bu bir sabit olarak karşımıza çıkmaktadır.

Typedef


Typdef int tamsayı;



Satırdan sonra


Tamsayı i = 3;



gibi ifadeler kullanılabilecektir.

Typedef sözcüğünü içeren satır int ile aynı özelliklere sahip tamsayı adında yeni bir tipin oluşturulduğunu belirtmektedir. Yazım biçimi typedef ; olarak belirtilmektedir. Çoklukla karakterler 1 byte yer kaplarlar.

O halde; typedef, unsigned, char, byte; satırı ile byte tipine sahip olmuş olduk. Ancak bunu yeni bir tip olmadığını, üzerindeki bütün işlemlerin unsigned char ile olduğunu belirtmek gerekir.

Sıralama Tipleri

Birçok uygulamada da belli bir sistemin durumu önceden belirlenmiş sınırlı sayıda değerden biri olmak zorunda olabilir.Böyle bir sistemin rahat anlaşılması ve kolaylıkla genişletilebilmesi için,sistem durum değişkeninin sadece önceden belirlenmiş değerlerden birisi olmasının garantiye alınması gerekir.

C ve C++'da bunu sağlamak için sıralama tipleri tanımlıyoruz. Bu sıralama tipleri;


Enum<tip başlığı> {sabit listesi}

<değişken listesi>



biçiminde tanımlanır. Örneğin;


Enum Gunler [Pazartesi, Salı, Çarşamba, Perşembe, Cuma, Cumartesi, Pazar] bugün;



Burada günler sıralama tipinden herhangi bir değişken tanımladığımız zaman bu değişkenin değeri Pazartesi - Pazar aralığında olacaktır.Tanım içinde bugün adında bir değişken tanımladık bile. Ancak derleyici aslında tanımlanmış olan bu sabitlere birer tam sayı da değeri vererek, sıralama tipinden değişkenleri birer int olarak yorumlayacaktır.

Örneğin;


Enum Gunler [Pazartesi=1, Sali, Carsamba, Persembe, Cuma, Cumartesi, Pazar= cumartesi] bugün;



Burada pazartesi 1, Salı 2 şeklinde giderken, Cumartesi ve Pazar 6 değerine sahip olacaktır. Yani Cumartesi ve Pazar tatil günleri anımsanmayacaktır.

Eğer biz değer vermezsek sabitlerin tamsayı karşılıkları 0'dan başlar ve soldan sağa 1'er artar. Bu sistem C ve C++ arasında bir ayrımı da beraberinde getirir. C'de sıralama tipi değişkenleri herhangi bir tamsayıya eşitlenebilir.

Örneğin;


Bugun=8;



Bu örnek C'de geçeli olacaktır, ancak C++'da bu satır hatalı olarak yorumlanacaktır. C++ sıralama tipi değişkenlerin ancak tip tanımında belirtilen sabitlere eşitlenmesine izin vermektedir. Bugun = Pazartesi;
gibi. Bu değişiklik sıralama tiplerinde en çok karşılaşılan bir hatanın kesinlikle saptanabilmesine olanak sağlar.

Yapılar

C'de temel veri tiplerinden birkaç değişken içeren bileşke yapılar oluşturmak mümkündür. C++ bunu birkaç ufak kural değişikliği ile desteklemek ile birlikte aynı amaç için nesne tabanlı paradigma çerçevesinde çok daha gelişkin araçlar sunmaktadır.


Struct{

İnt yas;

Char * isim;

}bora;

Bora.yas=21;

Bora.isim="bora"



Bunlar ile bora adında bir yapı (struct) değişkeni oluşturduk. Bu değişkenin yaş ve isim adında iki verisi var ve bu veriler birbirinden bağımsız biçimde değiştirilebiliyor.

C++'da ise yapılar birer sınıf (class) olarak varsayılır ve değişkenler dışarıdan erişime açık olmaz (veri saklama)


Bora.yas=99; //artık bir hata



Bunu engellemenin bir yolu C++ derleyicisine yapılan C'de olduğu gibi yorumlamasını gerektiğini belirtmektedir.


Extern "C" {

Struct Ogrenci{

İnt yas;

Char * isim;

};

}

Ogrenci bora; // C++'da struct sözcüğüne gerek yok.

Bora.yas=21;

Bora.isim="Bora";



Burada Extern sözcüğü ile derleyici dışındaki bir kaynağın kullanılacağı ya da standart kuralların geçerli olmayacağı bir derleme gerektiği anlatılmaktadır. "C parametresi ise sadece takip eden ifadesini ya da küme parantezi ile belirlenmiş bloğun C kodu ile anlaşılması gerektiğini açıklamaktadır.

Bir diğer yaklaşım ise kodun C++ derleyici tarafından derlenip derlenmediğini sınayıp ona göre davranmaktadır.


Struct ogrenci {

#ifdef_cplusplus

Public:

#endif

İnt yas;

Char * isim;

};



Burada _cplusplus derleyicinin C++ derleyici gibi çalışıp çalışmadığını belirleyen özel bir sabittir. Eğer C derleyici olarak çalışmakta ise bu sabit tanımlanmamış olacaktır. Bu tür sabitlere belirleyici sabit adı verilir. Derleyicinin derleme anındaki ayarlarına göre değişik kodlar derleme olanağı sağlar. Her derleyicide önceden tanımlanmış bu tür sabit ve makro bulunmaktadır.

Bileşkeler

Bileşkeler yapılar ile oldukça yakın ilişkili olan konulardır. Bir bileşke temel olarak bir yapıdır,ancak yapıya ait verilerden aynı anda sadece birini kullanabiliriz.

Nesne tabanlı bir kod yazan bir C++ programcısının C yapıları ve bileşkeleri kullanmasına gerek yoktur.

Tüm arkadaşlara başarılar diliyorum. Bir sonraki yazı serisinde buluşmak ümidiyle...
  • Etiketler;
Acem kızı Acem kızı
Aşkın Anahtarı Þairinin Elinde.!!
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git