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

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Onaylı Üye
Katılım
23 Ocak 2016
Mesajlar
142
Tepki puanı
0
10 HİZMET YILI
[font=Roboto, Tahoma, Arial, sans-serif]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 (<vei tipi>) 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 < tip ya da yapı tanımı> < yeni tip adı>; 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.


Alıntıdır.[/FONT]
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst