SlideShare a Scribd company logo
1 of 27
Karabük Üniversitesi
Uzaktan Eğitim Araştırma ve Uygulama Merkezi
1. HAFTA
BLM225
Nesneye Dayalı Programlama
2
Dersin Adı : Nesneye Dayalı Programlama
Bu dersi alan öğrenci Nesneye dayalı programlama kavramını ve altında yatan düşünce
mantığını analayacak, C++ dilini kullanarak Sınıf tanımlarını yapabilecek, Kendi
oluşturduğu Sınıfları, Mevcut Sınıfları ve Şablonları tekrar kullanarak Nesneye Yönelik
Programlar yazabilecektir.
Konular
Nesneye Dayalı Programlamaya giriş
C++ programlama dilinin Temelleri, Döngü ve Kararlar, Fonksiyonlar
Yapılar (Struct)
Sınıf (Class) yapısı, Kullanımı ve Özellikleri
Kurucu (constructor) ve Yokedici fonksiyonlar (destructor)
Nesnelerin fonksiyonlara parametre olarak gönderilmesi
Operatörlere yeni işlevlerin yüklenmesi (operator overloading)
Kalıtım (Inheritance)
Kalıtımın kurucu ve yok ediciler üzerindeki etkisi
Çoklu kalıtım (multiple inheritance)
Nesne işaretçileri (pointers to objects)
Çok Şekillilik (Polymorphism)
Sıra Dışı Durumlar (Exceptions)
Şablonlar (Templates)
Kaynaklar:
1. Object Oriented Programming in C++, Robert Lafore, Fourth Edition, Sams Publishing,
2002, (Kitabın türkçe çevirisi bulunmakta, Nesne Yönelimli C++ Programlama Kılavuzu,
Robert Lafore, Alfa yayınları)
2. C++ How to Program, Seventh edition, Harvey M. Deitel and Paul J. Deitel, Deitel &
Associates, Inc. 2010.(Kitabın türkçe çevirisi bulunmakta, C ve C++, Deitel & Deitel,
Sistem yayıncılık)
3. Thinking in C++ (Free Electronic Book), Bruce Eckel, 2nd ed., Vol. 1 and Vol.2,
Prentice-Hall, 2000 and 2003.
4. C++ ve Nesneye Yönelik Programlama, M. Erhan SARIDOĞAN, Papatya yayıncılık,
2004
5. C++ ile Nesne Tabanlı programlama, Bora GÜNGÖREN, Seçkin yayıncılık, 2001
İnternet Kaynakları
6. http://www.buzluca.com/cpp/notlar.html
7. http://www.functionx.com/cpp/
8. http://web.itu.edu.tr/~mscelebi/cpp/index.html
9. http://web.itu.edu.tr/~uyar/programlama/c.pdf
10. http://www.cplusplus.com/doc/tutorial/introduction/
11. http://sundog97.tripod.com/tutorial_cpp/index.html
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
2
BLM225
Nesneye Dayalı Programlama
3
1. Giriş
Programlama, Yaşadığımız gerçek dünyadaki problemlerin çözümlerinin bilgisayarda ifade
edilmesidir. Programcılar problemlerin çözümleri ile ilgili kavramları, varlıkları kullandıkları
programlama dili ile ifade ederler[1]. Programlama teknikleri şu şekilde sıralanabilir [7].
Yapısal olmayan programlama
Yapısal programlama
Nesne Yönelimli programlama
Görsel Programlama
Yapısal olmayan programlama
Bu yöntemde program bir tek ana program yer alır. Ana program ard arda gelen komut
dizilerinden oluşur. Altprogramlar ve bloklama yoktur. Ana program içinde kullanılan
komutlar global olarak tanımlanmış değişkenlere erişerek kullanırlar. Programlar büyüdükçe
tanımlanan değişkenlerin bozulması mümkün olabilmektedir. Ayrıca program için kullanılan
ve ard arda gelen komut dizilerini tekrar kullanmak gerektiğinde bu komut dizilerini tekrar
uygun yere kopyalayıp kullanmak gerekmektedir. Bu ise program boyunu gereksiz yere
uzatmaktadır. Programın okunabilirliğini, anlaşılabilirliğini azaltmakta ve hataları bulmayı
zorlaştırmaktadır.
Şekil 1. Yapısal olmayan programlama
Yapısal (structural) programlama
Procedural (işleve dayalı, altprogram kullanmaya dayalı) programlama olarak da ifade
edilebilir. Bu programlama yönteminde bloklar halinde program yazma ve altprogramların
kullanımı ön plana çıkmaktadır. Altprogram(procedure, subroutine) ve
Fonksiyonlar(Function) küçük farklarla benzer kavramları ifade etmektedirler. Her ikisi de
belirli bir amaca yönelik işlemleri yerine getiren program parçacıklarıdır. İhtiyac duyulan her
noktada ana program akışı içinde herhangi bir noktadan isimleri yazılarak defalarca çağrılıp
kullanılabilirler. Ana program sıralı bir şekilde değişik altprogramların çağrılıp kullanılması
ile oluşturulur. Ana programdan altprograma veri işlenmek üzere gönderilir. Altprogram bunu
işleyerek anaprograma tekrar geri dönderir. Altprogramlar bir kez hatasız bir şekilde
yazıldıktan sonra defalarca kullanılabilir. Bir hata oluştuğunda hatanın kaynağını bulmak daha
kolaydır. Programın anlaşılabilirliği, okunabilirliği daha yüksektir. Ancak Şekil 2’ de
görüldüğü gibi global verilere erişimde bir sınırlama getirilmemiştir. Veriler ve bu veriler
üzerinde işlem yapan fonksiyonlar ayrı ayrı düşünülmüştür. Verilerin bozulmasına karşı
herhangi bir önlem alınmadığından veri güvenliği yetersizdir. Bu yöntemde verilerden ziyade
fonksiyonlara ağırlık verilmektedir. Tasarım aşamasında ilk sorulan soru program ne iş
yapacak sorusudur.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
3
BLM225
Nesneye Dayalı Programlama
4
Şekil 2 Fonksiyonların Global değişkenlere erişimi
Nesneye Yönelimli programlama(NYP)
Nesne Yönelimli Programla yöntemi uzun ve karmaşık programlar geliştirmek için
tasarlanmıştır. Günümüzde bilgisayarda çözülmek istenen problemler eskiye oranla daha
karmaşık ve büyüktür. Programlar uzadıkça, problemi analiz etmek ve çözmek
zorlaşmaktadır. Donanım maliyetleri düşerken yazılım maliyeti artmaktadır.
Daha Güvenilir, dayanıklı, esnek, geliştirilebilir, Tekrar kullanılabilir ve daha kolay bakımı
yapılabilen kaliteli programlar yazabilmek için yazılım problemlerine Nesne Yönelimli
Analiz ile yaklaşmak daha fazla avantajlar sağlamaktadır. Şekil 1.5 de Nesne Yönelimli
yaklaşım görülmektedir.
NYP yönteminde veriler ve bu veriler üzerinde işlem yapan fonksiyonlar bir araya getirilerek
nesne (object) adı verilen bir yapı oluşturulmuştur. Nesneler birbirleri ile mesaj göndererek
haberleşebilirler. Her bir nesnenin verilerle ifade edilen Nitelikleri(özellikleri), ve
Fonksiyonlarla ifade edilen (Davranışları) bulunur. Veri ve fonksiyonların bir arada
bulunmasına Paketleme(Encaptulation) adı verilir. Verilerin diğer nesnelerden gizlenebilmesi
veya erişiminin kısıtlanması mümkündür. Buna veri gizleme(data hiding) denilmektedir.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
4
BLM225
Nesneye Dayalı Programlama
5
Şekil 3 Nesne yönelimli yaklaşım
Nesne yönelimli programlamada programları güncellemek veya yeni eklentiler yapmak daha
kolaydır. Nesne yönelimli programlama yönteminde sistem içinde bir çok nesne yer alır. Bu
nesneler birbirlerinden farklı özellikler taşıyabildikleri gibi aynı veya benzer özellikler de
taşıyabilirler. Nesneye dayalı programlamada tasarım yapılırken öncelikle veriler esas alınır.
Nesne Yönelimli programlamada Paketleme(Encaptulation), Soyutlama(Abstraction),
Türeme (Derivation), Miras alma veya Kalitim (Inheritence) gibi kavramlar yer almaktadır.
Neler nesne olarak modellenebilir.
Memur, müdür, Öğretmen, Öğrenci, ….
Nokta, Çizgi, Çember, Silindir, ….
Matris, Vektörler, Karmaşık sayı,…
Çerçeve, menü, Pencere,…
Nesneye dayalı yöntemin değerlendirilmesi.
Problemlerin çözümüne ilişkin daha gerçekçi bir model oluşturulabilir.
Oluşturulan bir nesne daha sonra defalarca tekrar kullanılabilir(reusability)
Programları güncellemek, hataları bulmak, bakımını yapmak daha kolaydır
Ekip çalışmaları için uygundur.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
5
BLM225
Nesneye Dayalı Programlama
6
1.2 C++ programlama dili
C++ Dilinin Tarihsel Gelişimi
C Programlama dili genel amaçlı orta seviyeli ve yapısal bir programlama dilidir. 1972
yılında Dennis Ritchie tarafından Bell Laboratuarında Unix işletim sistemi ile kullanılmak
için tasarlanmıştır. C, özellikle sistem programlamada sembolik makine dili (Asembly) göre
tercih edilmektedir. İşletim sistemleri, derleyiciler ve debug gibi aşağı seviyeli sistem
programlarının yazılımında yoğun olarak C programlama dili kullanılır.
C++ dili C diline bazı özelliklerin eklenmesi ile Bjarne Stroustroup tarafindan BELL
laboratuarlarında gelistirilmistir. 1983 ilk C++ derleyicisi sunulmuştur. 1998 ISO C++ dili
standartlari kabul edilmiştir.
Neden C++
-Daha iyi bir C dir. C dilinin bir üst kümesi olduğundan bu dilin hemen hemen bütün
özelliklerini destekler
-Veri Soyutlamasını destekler
-Nesne yönelimli programlamayı destekler
-Geliştirilebilir programlamayı destekler[1]
-Çok sayıda kaynak dokümana sahiptir
.
C++ İle Programlamaya Giriş
C++ programlama dilini öğrenmeye basit bir program yazarak başlayalım. Aşağıda
“Hello.cpp” olarak bilgisayara kaydedilen bir program görülmektedir.Bu program ekrana
“Hello World” Türkçesi “Merhaba Dünya” anlamına gelen kelimeleri yazmaktadır.
Şekil 2.1 Basit bir C++ programı
Programın ekran çıktısı şu şekildedir.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
6
// Hello.cpp
// Ekrana " Hello World” yazan program
#include <iostream>
using namespace std;
int main()
{
cout << " Hello Worldn";
getch();
return 0;
}
BLM225
Nesneye Dayalı Programlama
7
Programın açıklaması
C dilinde yazılan programları uzantısı “ .c” ve C++ dilinde yazılan programların uzantısı
“.cpp” dir.
"//" işareti açıklama(yorum) satırlarını ifade etmektedir. C++ derleyicisi bu işaretle başlayan
satırları dikkate almaz. Birden fazla satırı iptal etmek veya açıklama satırı olarak göstermek
için bunları da “/*” ve “*/” işaretleri arasına almak gerekir.
#include <iostream.h> satırı C++ da bulunan ve ismi belirtilerek istenilen kütüphane
dosyasını programa dahil etmek için kullanılmıştır. Burada <iostream.h> kütüphane dosyası
programa dahil edilmektedir. Bu dosya içinde cout ve cin komutları bulunmaktadır. Cout ve
cin komutlarını kullanabilmek için bu kutuphane dosyası programa dahil edilmek zorundadır.
“.h” ile biten dosyalar kütüphane dosyalarıdır. C++ da ki hazır kütüphanelerde bir çok hazır
fonksiyonlar vardır.
Her C++ programında mutlaka bir main() isimli ana fonksiyon yer almak zorundadır.
Program main() fonksiyonundan itibaren çaşlıştırılmaya başlanır. Main() fonksiyonunun
önünde yer alan “int” ifadesi main() fonksiyonunun dönüş tipini göstermektedir. Yani bu
fonksiyon geriye int(tamsayı) bir değer döndermektedir. Dolayısı ile “return 0” ifadesi ile
geriye 0 değeri dönderilmektedir. Cout komutu ekrana bir değeri veya cümleyi yazdırmak için
kullanılan bir komut(fonkiyon)dur.
C++ da ana fonksiyondan hemen sonra yer alan komutlar " { } " parantezleri arasına yazılır.
Önemli bir nokta ise C++ dilinde her komut " ; " ile bitmek zorundadır.
" Hello Worldn" cümlesinin sonunda yer alan " n " karakterleri imleci bir sonraki satıra
konumlandırmak için kullanılmaktadır. Bu şekilde kullanılan karekter sabitleri ve ne için
kullanıldıkları aşağıda görülmektedir.
Tanım
'0' NULL karakter
'a' çan sesi (alert)
'b' geri boşluk (back space)
't' tab karakteri (tab)
'n' aşağı satır (new line)
'v' düşey tab (vertical tab)
'f' sayfa ileri (form feed)
'r' satır başı (carriage return)
'"' çift tırnak (double quote)
'' ters bölü (back slash)
" n " karekter sabiti kullanmadan aşağıdaki komut da aynı işlevi görmektedir. “endl”
komutu bir alt satıra imleci konumlandırır.
cout << " Hello World"<<endl;
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
7
BLM225
Nesneye Dayalı Programlama
8
C++ dilinin genel yapısı aşağıda verilen örnek programla daha iyi anlaşılacaktır.
Şekil 2.2 Bir C++ programının yapısı
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
8
// Ornek1.cpp
// C++ da genel program yapısı.
#include <iostream>
#define pi 3.14;
const int max=10;
int a,b;
float ort;
int OrtalamaHesapla(int vize1, int final1)
{
float ortalama;
ortalama=vize1*0.4+final1*0.6;
return ortalama;
}
int main() // main fonksiyonundan program çalışmaya başlar
{
int vize;
int final;
std::cout << "Vize notunu giriniz :"; //Ekrana yaz
std::cin>>vize; //Klavyeden giriş
std::cout << "Final notunu giriniz :";
std::cin>>final;
ort=OrtalamaHesapla(vize,final);
std::cout << "Ortalama notu = "<<ort;
getch();
return 0; // programın başarılı bir şekilde
// sonlandığını belirtir.
} // main fonksiyonu sonu
Program başlığı
Program ile ilgili Açıklamalar
Kullanılan
kütüphane dosyaları
Global
Değişken ve sabitler
Programcının
Tanımladığı
“OrtalamaHesapla”
İsimli Fonksiyon
Yerel değişkenler
AnaProgramBloğu
Yerel değişken
BLM225
Nesneye Dayalı Programlama
9
Programın ekran çıktısı
Bir C++ programı sırası ile aşağıdaki bölümlerden oluşur.
Program başlığı, program ile ilgili açıklamalar
Kullanılan kütüphane dosyaları
Global değişken tanımları
Programcının tanımladığı fonksiyonlar
Main fonksiyonu ana program bloğu
Şimdi bu bölümleri kısaca açıklayalım.
Program başlığı, program ile ilgili açıklamalar
Bu kısımda yazılan program ile ilgili açıklamalar, programı kimin yazdığı, yazım tarihi, amacı
gibi açıklamalar yazılır. Yazımı zorunlu olmamakla birlikte tavsiye edilmektedir.
Kullanılan kütüphane dosyaları
Bu bölümde programda kullanılacak kütüphane dosyalarının isimleri yazılır.
Global değişken tanımları
Değişkenler
Programın içerisinde farklı değerler alabilen, değeri değiştirilebilen semboler değişken olarak
tanımlanır. Bu semboller aslında bilgisayar belleğinde verinin saklandığı yeri ifade ederler.
Dolayısı ile bu alana yerleştirilecek veri de sürekli olarak değişebilir. Değişkenleri global ve
yerel değişkenler olarak iki gruba ayırmak mümkündür.
Global değişkenler main() fonksiyonu dışında programın baş kısmında tanımlanan
değişkenlerdir. Bu değişkenler programcının tanımladığı tüm fonksiyonlar ve ana program
bloğu içinden erişilip kullanılabilir. Başka bir ifade ile programın her yerinde faaliyet
gösterebilen, geçerli olan değişkenlerdir. Birden fazla fonksiyon aynı isimli global değişkene
erişip kullanabilir.Bu durum program hatalarına neden olabilir.
Yerel değişkenler Bir fonksiyon içinde ya da bir program bloğu içinde tanımlanan
değişkenlerdir. Main() fonksiyonu içinde tanımlanan değişkenler de yerel değişkenlerdir.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
9
BLM225
Nesneye Dayalı Programlama
10
Değişkenler aşağıdaki şekilde tanımlanır.
[Veri Tipi] [Değişken Adı];
Örnek:
char c; int sayi; float f; double d; unsigned int k; string adsoy;
Veri Tipleri
Sayısal veri tipleri
Karakter veri tipi
Mantıksal veri tipi
String (Karakter dizisi) veri tipi
Sayısal veri tipleri(Tamsayı,Gerçek)
Tamsayi veri tipi (char, int, long)
Tamsayı değerler alırlar. Aşağıdaki tabloda tamsayı veri türleri görülmektedir.
TÜR İSMİ UZUNLUK(byte) SINIR DEĞERLERİ
char 1 -128 127
unsigned char 1 0 255
int 2 -32.768 32.767
unsigned int 2 0 65.535
long 4 -2.147.483.648 2.147.483.647
unsigned long 4 0 4.294.967.296
1. char tipi
Tamsayı değerler alır. 8 bit uzunluğundadır. Bellekte 1 bayt yer kaplar. -128 ile +127 arasında
değer alır. Unsigned : 0 ile 255 arasında değer alır.
2.int tipi
Tamsayı değerler alır. 16 bit uzunluğunda ifade edilirler. Bellekte 2 Bayt kaplarlar. -32768 ile
+32767 arasinda değer alır. unsigned: 0 ile 65535 arasinda değer alır.
Örnek: int i; i değişkeni tam sayı türündendir. 3, -7 gibi değerler alabilir.
3. Long tip.
Tamsayı değerler alır. 32 bit uzunluğundadır. -2147483648 ile +2177483647 arasinda değer
alır, unsigned: 0 ile 65535 arasinda değer alır.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
10
BLM225
Nesneye Dayalı Programlama
11
Gerçek Tipler (Float, Double)
Gerçek (noktalı, küsüratlı) sayıları içerirler.
float : Bellekte 4 Byte yer tutar. -3.4xE38 ile . +3.4xE38 aralığında değer alır. Hassasiyet
7-8 basamaktır.
double : Bellekte 8 Byte ter tutar. . -1.7xE308 ile . 1.7xE+308 aralığında değer alır.
Hassasiyet 15-16 basamaktır.
“
Karakter tipi (char)
Char: Tek bir karakter değer alır. '0’,’1’,’2’,... ' ‘a’, ‘8’ , ‘%’ , ‘+’ , ‘F’ gibi değerler
alır. Aynı zamanda 8 bit uzunluğunda tamsayı değerler de alabilir. Ancak bir harfi veya
klavyeden basılacak bir tuşu değer olarak bir değişkene atamak istenirse char olarak
tanımlanır.
Mantıksal veri tipi(Bool)
Bool: true(dogru) = 1 veya false(yanlis) = 0 değerini alır. Eski derleyiciler bu türü
desteklemeyebilir. Yeni ANSI C++ standardında eklenmiştir.
String (Karakter dizisi) veri tipi
Bir ismi veya bir cümleyi bir değişkene atamak gerekirse bu değişken string olarak
tanımlanır. Örnek: “ali”, “bu gün hava güzel” gibi değerlerbu değişkene atanabilir. String
veri tipini kullanabilmek için
#include <string>
kütüphane dosyasının programa eklenmesi gerekmektedir.
Değişkenlere ilk değerleri tanımlandıkları anda da verilebilir.
Örnekler:
int a=5;
float f=3.14;
string adsoy=”Ali Demir”;
bool onay=true;
char ch=’A’;
int a=5;
float f=3.14;
string adsoy="Ali Demir";
bool onay=false;
char ch='A';
cout<<ch<<endl;
cout<<a<<" "<<f<<" "<<adsoy<<endl;
if (onay==!true)
cout<<"tamamdir";
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
11
BLM225
Nesneye Dayalı Programlama
12
else
cout<< "sorun var";
Operatörler
Bir değişkene değer atamak, bir işlem yapmak veya iki değişkeni karşılaştırmak gibi
işlemler yapmak için kullanılan ‘=’, ‘+’, ‘>’ gibi sembollerdir.
C++ da kullanılan Operatörleri öncelikle türlerine göre şu şekildedir.
1) Aritmetiksel operatörler + , - , * , / , % , ++ , --
2) Karşılaştırma operatörleri < , > , <=, >= , ==, !=
3) Atama operatörleri = , += , -=, *= , /= , %= , <=, >>=, &=, != , ^=
4) Mantıksal Operatörler ! , || , &&
5) Bit bazında işlem yapan operatörler & , | , ^ , ~
Şekil 2.3 de operatörlerin kullanımı ile ilgili bir örnek program verilmiştir. Bu programda
atama “=”, çarpma “*” ve toplama”+” ile karşılaştırma “>=”, “<” operatöreleri
kullanılmıştır.
Artırma ve Azaltma operatörleri
“++” artırma operatörüdür. “--“ azaltma operatörüdür. Önünde veya sonunda bulunduğu
değişkenin değerini bir artırmak veya azaltmak için kullanılır.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
12
//Vize ve final notlarinindan geçme notunu hesaplama
#include <iostream>
#include <conio.h>
int main()
{
int vize, final;
double ort;
vize = 43; //atama operatörü
final = 80;
ort = vize * 0.4 + final * 0.6; //Çarpma ve toplama operatörü
std::cout<< "Gecme notunuz: " << ort;
if(ort>=65) std::cout<<"nGectiniz n"; //Karşılaştırma operatörü
if(ort<65) std::cout<<"nKaldinizn";
getch();
return 0;
// artırazalt.cpp
// x i bir arttırıp y yi bir azaltarak çarpar
#include <conio.h>
#include <iostream.h>
#include <iostream>
using namespace std;
main()
{
int x = 4;
int y = 8;
cout << "x = " <<x << endl;
cout << "y = " << y << endl;
cout <<"++x * --y = " << ++x * --y ;
getch();
return 0;
}
BLM225
Nesneye Dayalı Programlama
13
Programın ekran çıktısı
" endl " komutu satır sonunu belirterek yeni satıra geçmemizi sağlar, bir nevi "n "
sembolü gibi bir işleve sahiptir.
Seviye Operatör Tanım
Öncelik Yönü
(associativity)
1 :: Kapsam(scope)
( ) öncelik kazandırma ve fonksiyon çağırma soldan sağa
[ ] indis operatörü (subscript)
. yapı elemanına ulaşım (structure access)
-> yapı elemanına gösterici ile ulaşım
2 + işaret operatörü (unary) sağdan sola
- işaret operatörü (unary)
++ 1 artırma (increment)
-- 1 eksiltme (decrement)
~ bitsel değil (bitwise not)
! mantıksal değil (logical not)
* içerik operatörü (indirection)
& adres operatörü (address of)
sizeof sizeof operatörü
3 * çarpma (multiplication) soldan sağa
/ bölme (division)
% modulus (bölümden kalan)
4 + toplama (addition) soldan sağa
- çıkarma (suntraction)
5 << bitsel sola kaydırma (bitwise shift left) soldan sağa
>> bitsel saga kaydırma (bitwise shift right)
6 < küçüktür (less than) soldan sağa
> büyüktür (greater than)
<= küçük eşittir (less than or equal)
>= büyük eşittir (greater than or equal)
7 = = eşittir (equal) soldan sağa
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
13
BLM225
Nesneye Dayalı Programlama
14
!= eşit değildir (not equal to)
8 & bitsel VE (bitwise AND) soldan sağa
9 ^ bitsel EXOR (bitwise EXOR) soldan sağa
10 | bitsel VEYA (bitwise OR) soldan sağa
11 && mantıksal VE (logical AND) soldan sağa
12 || mantıksal VEYA (logical OR) soldan sağa
13 ?: koşul operatörü (conditional operator) sağdan sola
14 = atama (assignement) sağdan sola
+= işlemli atama (assignment addition)
-= işlemli atama (assignment subtraction)
*= işlemli atama (assignment multiplication)
/= işlemli atama (assignment division)
%= işlemli atama (assignment modulus)
<<= işlemli atama (assignment shift left)
>>= işlemli atama (assignment shift right)
&= işlemli atama (assignment bitwise AND)
|= işlemli atama (assignment bitwise OR)
^= işlemli atama (assignment bitwise EXOR)
15 , virgül operatörü (comma)
Operatörlerin öncelik sıralarına göre aşağıda verilen işlemi inceleyelim.
*,/, % operatörleri aynı önceliğe sahip olmalarına karşın, öncelik sırası soldan sağa doğru
olduğundan Öncelikle p*r işlemi, daha sonra şekle göre 2 numaralı işlem(%) daha sonra
bölme işlemi şeklinde verilen sırada işlemler gerçekleştirilecektir.
Bir başka örnek işlem sırasını inceleyin
Program Kontrol ve Döngü Komutları
if Komutu
Belirli bir şarta bağlı olarak bir işlem veya işlemlerin yapılmasını sağlamak amacı ile
kullanılan karşılalştırma komutudur.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
14
if (şart)
{
Komut1;
Komut2;
...
}
if ( şart )
{
komut1;
komut2;
...
}
else
{
komut1;
komut2;
...
}
BLM225
Nesneye Dayalı Programlama
15
Şeklinde bir kullanıma sahiptir. Örnek olarak notu 50 den büyük ise ekrana Geçtiniz
yazan if komutu aşağıda gösterildiği gibidir.
if ( not >= 50 ) cout << "Geçtiniz!";
Notu 50 den buyuk ve 70 den kuçuk ise ekrana iyi değilse zayıf yazan if komutu aşağıdaki
gibidir.
if ( not > 50 && not <70)
cout << "iyi!";
else
cout << "zayıf!";
Switch-case Komutları
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
15
//pozitif.cpp
main()
{
int x;
cout << "Bir sayı girin:" ;
cin>> x;
if ( x > 0 )
cout << "n Pozitif" ;
else
cout<< “n negatif”
return 0;
}
BLM225
Nesneye Dayalı Programlama
16
Switch Case deyimi bir çeşit if komutu gibidir. Kontrol değişkeninin aldığı değere göre
istenen komutları işlemeye yarar. işlev bakımından if deyimine çok benzemektedir.
Değişken değeri sabit1’e eşit ise komut1, . Değişken değeri sabit2’e
Eşit ise komut2 vb. İşlem görür. Hicbir komut işlem görmemiş ise default ifadesi
altındaki komutlar işlem görecektir.
switch( Kontrol Değişkeni )
{
case Sabit1 : komut1; break;
case Sabit2 : komut2; break;
.
.
.
default : Komut;
}
switch örneği if-else eşdeğeri
#include <iostream>
using namespace std;
int main()
{
int x;
cout<< " Bir sayı giriniz:";
cin>>x;
switch (x) {
case 1:
cout << "x değeri 1";
break;
case 2:
cout << "x değeri 2";
break;
default:
cout << "x 1 ve 2 den farkli ";
}
return 0;
}
.
.
.
int x;
cout<< " Bir sayı giriniz:";
cin>>x;
if (x == 1) {
cout << "x değeri 1";
}
else if (x == 2) {
cout << "x değeri 2";
}
else {
cout << "x 1 ve 2 den farklı ";
}
.
.
.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
16
BLM225
Nesneye Dayalı Programlama
17
Döngü Komutları
Bir ya da birden fazla komutun istenen sayıda veya belirli bir şart gerçekleşinceye kadar
çalıştırılması istenirse döngü komutlarından yararlanılır.
For döngüsü,
while döngüsü,
do-while döngüsü
C++ da kullanılan döngülerdir.
For döngüsü
İşlemin kaç defa tekrar edeceği önceden belli ise for döngüsü kullanılır.
for (baslangıc; bitiş şartı; artım) Komutlar;
örnek: 1 den 100 e kadar olan for dongusu şu şekilde yazılmalıdır.
for (j=0; j<100; j++) Komutlar;
For döngüsü için aşağıdaki örnekleri inceleyiniz.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
17
//toplam.cpp
//for döngüsüyle 1 den 100 e kadar
// sayıların toplamını bulan program.
#include <iostream>
int main()
{
int top;
top=0;
for (int j=1; j<=100; j++)
{
top=top+j;
}
cout<<"toplam = "<< top;
return 0;
}
//factoriyel.cpp
//for döngüsüyle faktöriyel hesap.
#include <iostream>
int main()
{
int fak, sayi;
cout<<"Sayıyı giriniz: ";
cin>>sayi;
fak=1;
for (int j=1; j<=sayi; j++)
{
fak=fak*j;
}
cout<<"Sonuc: "<< fak;
return 0;
}
BLM225
Nesneye Dayalı Programlama
18
While ve do-while döngüsü
While döngüsü, döngü sayısının belli olmadığı zamanlarda kullanılır.Aşağıa verildiği
şekilde kullanılır.
While döngüsü, parantez içinde verilen şart doğru olduğu sürece altındaki komut veya
komut bloğu yürütülür. Eğer yanlış ise kontrol bir sonraki komut veya komut bloğuna
geçer. do-while döngüsünün while döngüsünden farkı döngünün devam edebilmesi için
gerekli olan şart kontrolünün döngü bloğunun sonunda yapılmasıdır. Dolayısı ile döngü
şart yanlış olsa bile bir defa icra edilecektir.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
18
// whileornek.cpp
// Klavyeden girilen sayıya kadar olan
//sayıları toplar
#include <iostream>
main()
{
int x, y;
y= 0;
cout<< " Bir Sayı Giriniz : ";
cin>>x;
while (x>0)
{
y =y+x;
x--;
}
cout<< "Toplam= "<< y;
return 0;
}
// do-whileornek.cpp
// Klavyeden girilen sayıya kadar olan
//sayıları toplar
#include <iostream>
main()
{
int x, y;
y= 0;
cout<< " Bir Sayı Giriniz : ";
cin>>x;
do
{
y =y+x;
x--;
} while (x>0);
cout<< "Toplam= "<< y;
return 0;
}
Do
{
Komut
Komut
Komut
.
Arttırım/azaltım
}while( Şart );
while( Şart )
{
Komut
Komut
.
Arttırım/azaltım
}
BLM225
Nesneye Dayalı Programlama
19
Break ve continue Komutu
Döngülerden herhangi bir noktada çıkılmak istenirse break komutu kullanılır. Örneğin x
değeri 5 olduğunda döngüden çıkmak istenirse if(x==5) break; komutu kullanılabilir.
Break komutu for döngüsü dahil bütün döngülerden çıkmayı sağlar. Bu durumda program
akışı döngü bloğunun sonundan devam eder.
while(1) { }, for(;;) { } döngüleri sonsuz döngüyü ifade eder. Sonsuz döngüden
break komutu ile çıkılır.
Continue komutu bir döngü içinde çalıştırılırsa, o döngü içinde bulunan tur sona erer
ancak döngü devam eder. Diğer bir deyişle, gövdenin içinde bulunan continue
komutundan sonra gelen cümleleri atlayarak, döngüyü devam ettirir.
Aşağıdaki örnekte ilk programda x=6 olduğunda döngüden tamamen çıkılmaktadır. İkinci
programda x=3 olduğunda döngü bir sonraki adımdan devam etmektedir. x=3 olduğu
andaki değeri ekrana yazılmayacaktır.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
19
//break komutunun kullanımı
#include <conio.h>
#include <iostream.h>
#include <iostream>
using namespace std;
main()
{
for (int x = 1; x <= 20; x++) {
if (x == 6) break;
cout<< x << " ";
}
getch();
return 0;
}
//continue komutunun kullanımı
#include <iostream>
main()
{
for(int x=0; x <= 9; x++)
{
if(x ==3) continue;
cout<< x<< “ “;
}
}
BLM225
Nesneye Dayalı Programlama
20
Diziler ve Pointerler
Bellekte ardışık bir biçimde bulunan ve aynı türden verilerin oluşturduğu veri yapısına dizi
(array) denir. Diziler hafızada bir yer kaplarlar. Programcı, her elemanın tipini ve dizide kaç
eleman kullanacağını belirterek bilgisayarın en uygun hafızayı ayırmasını sağlar. Dizi boyutu
başlangıçta belirtildikten sonra bellekte dizinin eleman sayısı kadar sıralı olarak yer ayrılır.
Dizi boyutu daha sonra program içinde çalışma anında tekrar değiştirilmez. Bu yüzden gerekli
olduğunda çalışma hatası ile karşılaşmamak için dizi boyutu aşılıp aşılmadığı kontrol
edilmelidir. Dizi tanımlaması şu şekilde yapılır.
Veri tipi Dizi ismi [dizi boyutu];
Örnek 10 elemanlı tamsayı türünde A isimli bir dizi tanılmamak istediğimizde aşağıda verilen
tanımlamayı yapmak gerekmektedir.
int A[10];
float x[100], y[50], z[10]; //x 100 elamanlı, y 50 elemanlı z 10 elemanlı bir dizi
#define BOYUT 100
int dizi[BOYUT]; // 100 elemanlı bir dizi
a[n] şeklinde tanımlanan bir dizinin ilk elemanı a[0] ve son elemanı a[n-1] dir.
Aşağıda verilen for döngüsü dizi içeriğini sıfırlamaktadır.
for (i = 0; i < BOYUT; ++i)
dizi[i]=0; //Dizinin bütün elemanlarını sıfırlar
dizi[5]=78; // dizinin 5. elemanına 78 değeri atanmaktadır.
Dizilere tanımlandıkları anda ilk değerleri de verilebilir.
Örnekler:
double sample[5] = {1.3, 2.5, 3.5, 5.8, 6.0};
double sample[] = {1.3, 2.5, 3.5, 5.8, 6.0};
char str[4] = {‘d’, ‘i’, ‘z’, ‘i’};
unsigned veri[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
20
BLM225
Nesneye Dayalı Programlama
21
Dizilere yukarıdaki gibi ilk değer verildiğinde, verilen değerler dizinin ilk elemanından
başlayarak dizi elemanlarına sırayla atanmış olur.
Dizilerin tüm elemanlarına ilk değer verme zorunluluğu yoktur. Dizinin eleman sayısından
daha az sayıda elemana ilk değer verilmesi durumunda kalan elemanlara otomatik olarak 0
değeri atanmış olur.
int a[20] = {0}; //yalnızca dizinin ilk elemanına 0 değeri vermekle derleyici dizinin kalan
elemanlarına otomatik olarak 0 değeri atayacaktır.
dizi elemanlarına ilk değer verme işleminde dizi uzunluğu belirtilmeyebilir, bu durumda
derleyici dizi uzunluğunu verilen ilk değerleri sayarak kendi hesaplar ve dizinin o uzunlukta
açıldığını kabul eder. Örneğin :
int sample[] = {1, 2, 3, 4, 5};
derleyici yukarıdaki ifadeyi gördüğünde sample dizisinin 5 elemanlı olduğunu kabul
edecektir.
başka örnekler :
char isim[ ] = {‘S’, ‘a’, ‘l’, ‘i’, ‘h’, ‘0’};
unsigned short count[ ] = {23, 4, 8, 7, 8, 9, 12, 75, 13, 45};
derleyici isim dizisinin uzunluğunu 6, count dizisinin uzunluğunu ise 10 olarak varsayacaktır.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
21
//Dizi kullanımı
#include <iostream>
int main( )
{
int n[10]={32, 27, 64, 18, 95, 14, 90, 70, 60, 37};
cout<< "Eleman Degerin";
for (int i = 0; i <= 9 ;i++)
cout<< i<<" "<<n[i]<<endl;
getch();
return 0;
}
BLM225
Nesneye Dayalı Programlama
22
Dizileri Fonksiyonlara giriş olarak göndermek için dizinin ismini parantez kullanmadan
belirtilir. Genellikle Diziler fonksiyonlara geçirilirken boyutları da geçirilir.
int myDizi[ 24 ];
myFunction( myDizi, 24 );
Göstericiler (İşaretçiler-Pointers)
İşaretçi, bellek alanındaki herhangi bir gözün adresinin saklandığı değişkenlerdir. İşaretçiler
verileri değil o verilerin bulunduğu yerlerin bellek adreslerini tutarlar. Tüm işaretçilerin
bellekte kapladığı alan int boyutundadır. Her değişken bellekte yer kapladığına göre belirli bir
adrese sahiptir. Değişkenlerin adresleri, derleyici ve işletim sistemi tarafından ortaklaşa
olarak belirlenir. Nesnelerin adresleri program yüklenmeden önce kesin olarak bilinemez ve
programcı tarafından da önceden tespit edilemez. Programcı, nesnelerin adreslerini ancak
programın çalışması sırasında (run time) öğrenebilir. Örneğin:
char ch=’A’; //ASCII kodu belleğe yerleşir 65
int b=0x45;
long f=0x12345678; //Hexadesimal değer f değişkenine atanıyor
biçiminde bir tanımlamayla karşılaşan derleyici bellekte ch değişkeni için 1 byte, b değişkeni
için 2 byte ve f değişkeni için 4 byte yer ayıracaktır. Program çalıştırılarak belleğe
yüklenmeden derleyicinin ch değişkeni için bellekte hangi adresi ayıracağını önceden bilmek
mümkün değildir. Bu durum b ve f değişkenleri içinde geçerlidir.. Bu ancak programın
çalışması sırasında öğrenilebilir. Aşağıda verilen çizimde değişkenler için ayrılan adresler ve
içerikleri görülmektedir.
Adres İçeriği
1A00 ?
ch 1A01 65
1A02 ?
b 1A03 45
1A04 00
1A05 ?
f 1A06 78
1A07 56
1A08 34
1A09 12
1A0A ?
1A0B ?
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
22
BLM225
Nesneye Dayalı Programlama
23
1A0C ?
1A0D ?
Göstericiler program içinde tanımlanmış diğer değişkenlerin adreslerini tutan değişkenlerdir.
Değişkenlerin adreslerini tutmak ve adreslerle ilgili işlemler yapmak için kullanılır.
Göstericilerin içlerinde adres bilgileri bulunur. Bu nedenle gösterici ile adres hemen hemen eş
anlamlı olarak düşünülebilir. Tüm göstericilerin bellekte kapladığı alan int boyutundadır
Gösterici bildirimlerinin genel biçimi şöyledir:
Veri tipi * gösterici ismi;
Örnek :
float *f; //f değişkeni float türünden bir değişkenin adresini tutacak
char *s; //s değişkeni char türünden bir değişkenin adresini tutacak
int *dizi; //dizi değişkeni int türünden bir değişkenin adresini tutacak
göstericilerle ilgili işlem yaparken kullanılan operatörler şu şekildedir.
& ya da adres operatörü, operandının adresini döndüren bir tekli operatördür.
* operatörü hem gösterici tanımlanırken kullanılır. hemde göstericinin tuttuğu(sakladığı, buna
gösterdiği de denilebilir) adresin içindeki değere ulaşmak için kullanılır. Bu yüzden içerik
operatörü olarak ta söylenmektedir.
Örneğin,
Aşağıda tanımlanan değişkenlerin yukarda verilen şekle göre işlemleri şu şekildedir.
char ch=’A’; //ASCII kodu belleğe yerleşir 65
int b=45;
long f=0x12345678; //Hexadesimal değer f değişkenine atanıyor
aşağıdaki şekilde tanımlanan pointer değişkenlerle ilgili olarak,
char *p1;
int *p2;
long *p3;
p1=&ch; //p1=1A01 olur
p2=&b; //p2=1A03 olur
p3=&f; //p3=1A06 olur
işlemleri yapıldıktan sonra
char c1;
int c2;
long c3;
c1=*p1; //c1=65
c2=*p2; //c2=45
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
23
BLM225
Nesneye Dayalı Programlama
24
c3=*p3; //c3=0x12345678
olur
#include <iostream.h>
#include <iostream>
using namespace std;
int main( )
{
int a,b;
int *p1,*p2;
a=10;
b=20;
p1=&a; // a değişkeninin ram deki
//adresini p1(pointer) değişkeninin içine ata
p2=&b; //
cout<<*p1<<endl; // p1 pointerının
içindeki //adreste bulunan değeri ekranda
gösterir
cout<<*p2<<endl;
getch();
return 0;
}
0x11 0x13
a b
----- ------ p1 p2
10 -------- --------
20
0x11
Ox13
#include <conio.h>
#include <iostream.h>
#include <iostream>
using namespace std;
int main( )
{
int a,b;
int *p1,*p2;
p1=&a;
p2=&b;
a=10;
b=20;
cout<<a<<endl;
cout<<b<<endl;
cout<<&a<<endl;
cout<<&b<<endl;
cout<<p1<<endl;
cout<<p2<<endl;
cout<<*p1<<endl;
cout<<*p2<<endl;
getch();
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
24
BLM225
Nesneye Dayalı Programlama
25
return 0;
}
int main() {
int *p1; //no initialization.
// int a;
// p1=&a;
*p1 = 3; //Possible segfault.
cout<<*p1<<endl;
getch();
}
#include <conio.h>
#include <iostream.h>
#include <iostream>
#include <string>
using namespace std;
struct A {
virtual void f() {
cout << "A::f();n";
}
};
int main() {
A* a = new A();
delete a;
a->f(); //Could cause a segfault.
getch();
}
void rcv()
{
int b;
int *x = 0;
x=&b;
*x = 3;
}
int main()
{
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
25
BLM225
Nesneye Dayalı Programlama
26
cout<<rcv();
getch();
return 0;
}
int rcv()
{
int b;
int *x = 0;
x=&b;
*x = 3;
return *x;
}
int main()
{
cout<<rcv();
getch();
return 0;
}
Gösterici Aritmetiği
Bazen göstericinin işaret etttiği adresten ileri ya da geri gitmek gerekebilir.
int *a;
float *b;;
char *c;
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
26
BLM225
Nesneye Dayalı Programlama
27
a++ denildiğinde a nın değeri int tipli bir değişkeni işaret ettiğinden int değişkenin belllekte
kapladığı alan (2) kadar artar. Benzer olarak b++ denildiğinde b’nin değeri 4 artacaktır.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
27
// Göstericiler * ve & operatörünü kullanmak
#include <iostream>
int main()
{
int a;
int *aPtr; //aPTr bir tamsayı göstericisi
a = 7;
aPtr = &a; // a değiskeninin adresi aPtr ye atanıyor.
cout << "a nin adresi : " << &a
<< "n aPtr degeri : " << aPtr;
cout << "nn a nin degeri : " << a
<< "n *aPtr nin degeri " << *aPtr;
cout << "nn &*aPtr = " << &*aPtr // *ve & ikisi birlikte kullanımı
<< "n *&aPtr = " << *&aPtr << endl; // yerleri fark etmez
return 0;
}

More Related Content

What's hot

11. stl kütüphanesi
11. stl kütüphanesi11. stl kütüphanesi
11. stl kütüphanesikarmuhtam
 
7. kalıtım
7. kalıtım7. kalıtım
7. kalıtımkarmuhtam
 
4. nesneler ve sınıflar
4. nesneler ve sınıflar4. nesneler ve sınıflar
4. nesneler ve sınıflarkarmuhtam
 
6. this işaretçisi ve arkadaşlık
6. this işaretçisi ve arkadaşlık6. this işaretçisi ve arkadaşlık
6. this işaretçisi ve arkadaşlıkkarmuhtam
 
Ileri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer KoculuIleri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer Koculumustafa sarac
 
Introduction to iOS Programming && About XMPPFramework
Introduction to iOS Programming && About XMPPFrameworkIntroduction to iOS Programming && About XMPPFramework
Introduction to iOS Programming && About XMPPFrameworkAnıl Sözeri
 

What's hot (7)

11. stl kütüphanesi
11. stl kütüphanesi11. stl kütüphanesi
11. stl kütüphanesi
 
7. kalıtım
7. kalıtım7. kalıtım
7. kalıtım
 
4. nesneler ve sınıflar
4. nesneler ve sınıflar4. nesneler ve sınıflar
4. nesneler ve sınıflar
 
6. this işaretçisi ve arkadaşlık
6. this işaretçisi ve arkadaşlık6. this işaretçisi ve arkadaşlık
6. this işaretçisi ve arkadaşlık
 
Ileri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer KoculuIleri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer Koculu
 
Introduction to iOS Programming && About XMPPFramework
Introduction to iOS Programming && About XMPPFrameworkIntroduction to iOS Programming && About XMPPFramework
Introduction to iOS Programming && About XMPPFramework
 
Sunu algo02
Sunu algo02Sunu algo02
Sunu algo02
 

Similar to 1. nesneye dayalı programlama giriş

Nesne tabanlı programlama 1
Nesne tabanlı programlama 1Nesne tabanlı programlama 1
Nesne tabanlı programlama 1Erol Dizdar
 
Yazilim mi̇mari̇leri̇(aoy)
Yazilim mi̇mari̇leri̇(aoy)Yazilim mi̇mari̇leri̇(aoy)
Yazilim mi̇mari̇leri̇(aoy)Ahmet Yanik
 
Implementation.pptx
Implementation.pptxImplementation.pptx
Implementation.pptxglkabakc
 
Internet programcılığı 3
Internet programcılığı 3Internet programcılığı 3
Internet programcılığı 3Erol Dizdar
 
Nesne tabanlı programlamaya giriş
Nesne tabanlı programlamaya girişNesne tabanlı programlamaya giriş
Nesne tabanlı programlamaya girişErol Dizdar
 
Yazilim Gelistirme Yöntemleri
Yazilim Gelistirme YöntemleriYazilim Gelistirme Yöntemleri
Yazilim Gelistirme Yöntemlerim_korkmaz
 
Nesne tabanlı programlamada sınıflar
Nesne tabanlı programlamada sınıflarNesne tabanlı programlamada sınıflar
Nesne tabanlı programlamada sınıflarErol Dizdar
 
Nesne tabanlı programlamada karar ve döngü yapıları
Nesne tabanlı programlamada karar ve döngü yapılarıNesne tabanlı programlamada karar ve döngü yapıları
Nesne tabanlı programlamada karar ve döngü yapılarıErol Dizdar
 
Algoritmalarve programlamai ders_1
Algoritmalarve programlamai ders_1Algoritmalarve programlamai ders_1
Algoritmalarve programlamai ders_1atasss
 
Internet programciligi-2
Internet programciligi-2Internet programciligi-2
Internet programciligi-2major5
 
Internet programcılığı 5
Internet programcılığı 5Internet programcılığı 5
Internet programcılığı 5Erol Dizdar
 
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008mtcakmak
 
Mikroprogramlanmis kontrol
Mikroprogramlanmis kontrolMikroprogramlanmis kontrol
Mikroprogramlanmis kontrolAykut Gündoğdu
 
Kodlamaya hazırlık
Kodlamaya hazırlıkKodlamaya hazırlık
Kodlamaya hazırlıkErol Dizdar
 
Internet programcılığı 2
Internet programcılığı 2Internet programcılığı 2
Internet programcılığı 2Erol Dizdar
 

Similar to 1. nesneye dayalı programlama giriş (20)

Nesne tabanlı programlama 1
Nesne tabanlı programlama 1Nesne tabanlı programlama 1
Nesne tabanlı programlama 1
 
Yazilim mi̇mari̇leri̇(aoy)
Yazilim mi̇mari̇leri̇(aoy)Yazilim mi̇mari̇leri̇(aoy)
Yazilim mi̇mari̇leri̇(aoy)
 
Implementation.pptx
Implementation.pptxImplementation.pptx
Implementation.pptx
 
Visual Studio Developer Tools
Visual Studio Developer ToolsVisual Studio Developer Tools
Visual Studio Developer Tools
 
ders bilgi
ders bilgiders bilgi
ders bilgi
 
Internet programcılığı 3
Internet programcılığı 3Internet programcılığı 3
Internet programcılığı 3
 
Nesne tabanlı programlamaya giriş
Nesne tabanlı programlamaya girişNesne tabanlı programlamaya giriş
Nesne tabanlı programlamaya giriş
 
yazılımmuh10.pptx
yazılımmuh10.pptxyazılımmuh10.pptx
yazılımmuh10.pptx
 
Bilgi sis..
Bilgi sis..Bilgi sis..
Bilgi sis..
 
Yazilim Gelistirme Yöntemleri
Yazilim Gelistirme YöntemleriYazilim Gelistirme Yöntemleri
Yazilim Gelistirme Yöntemleri
 
Basit kodlar
Basit kodlarBasit kodlar
Basit kodlar
 
Nesne tabanlı programlamada sınıflar
Nesne tabanlı programlamada sınıflarNesne tabanlı programlamada sınıflar
Nesne tabanlı programlamada sınıflar
 
Nesne tabanlı programlamada karar ve döngü yapıları
Nesne tabanlı programlamada karar ve döngü yapılarıNesne tabanlı programlamada karar ve döngü yapıları
Nesne tabanlı programlamada karar ve döngü yapıları
 
Algoritmalarve programlamai ders_1
Algoritmalarve programlamai ders_1Algoritmalarve programlamai ders_1
Algoritmalarve programlamai ders_1
 
Internet programciligi-2
Internet programciligi-2Internet programciligi-2
Internet programciligi-2
 
Internet programcılığı 5
Internet programcılığı 5Internet programcılığı 5
Internet programcılığı 5
 
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
 
Mikroprogramlanmis kontrol
Mikroprogramlanmis kontrolMikroprogramlanmis kontrol
Mikroprogramlanmis kontrol
 
Kodlamaya hazırlık
Kodlamaya hazırlıkKodlamaya hazırlık
Kodlamaya hazırlık
 
Internet programcılığı 2
Internet programcılığı 2Internet programcılığı 2
Internet programcılığı 2
 

More from karmuhtam

Devre analizi deney malzeme listesi
Devre analizi deney malzeme listesiDevre analizi deney malzeme listesi
Devre analizi deney malzeme listesikarmuhtam
 
Deney 3 ve 4
Deney 3 ve 4Deney 3 ve 4
Deney 3 ve 4karmuhtam
 
Deney 1 ve 2
Deney 1 ve 2Deney 1 ve 2
Deney 1 ve 2karmuhtam
 
Data structure week y 5 1
Data structure week y 5 1Data structure week y 5 1
Data structure week y 5 1karmuhtam
 
Data structure week y 5
Data structure week y 5Data structure week y 5
Data structure week y 5karmuhtam
 
Data structure week y 4
Data structure week y 4Data structure week y 4
Data structure week y 4karmuhtam
 
Data structure week 3
Data structure week 3Data structure week 3
Data structure week 3karmuhtam
 
Data structure week 2
Data structure week 2Data structure week 2
Data structure week 2karmuhtam
 
Data structure week 1
Data structure week 1Data structure week 1
Data structure week 1karmuhtam
 
12. stl örnekler
12.  stl örnekler12.  stl örnekler
12. stl örneklerkarmuhtam
 
Devre analizi defter
Devre analizi defterDevre analizi defter
Devre analizi defterkarmuhtam
 
H8 blm221 multiplexer-decoder-bellekler
H8 blm221 multiplexer-decoder-belleklerH8 blm221 multiplexer-decoder-bellekler
H8 blm221 multiplexer-decoder-belleklerkarmuhtam
 
H8 blm221 (1)
H8 blm221 (1)H8 blm221 (1)
H8 blm221 (1)karmuhtam
 

More from karmuhtam (18)

Devre analizi deney malzeme listesi
Devre analizi deney malzeme listesiDevre analizi deney malzeme listesi
Devre analizi deney malzeme listesi
 
Deney 6
Deney 6Deney 6
Deney 6
 
Deney 5
Deney 5Deney 5
Deney 5
 
Deney 3 ve 4
Deney 3 ve 4Deney 3 ve 4
Deney 3 ve 4
 
Deney 1 ve 2
Deney 1 ve 2Deney 1 ve 2
Deney 1 ve 2
 
Data structure week y 5 1
Data structure week y 5 1Data structure week y 5 1
Data structure week y 5 1
 
Data structure week y 5
Data structure week y 5Data structure week y 5
Data structure week y 5
 
Data structure week y 4
Data structure week y 4Data structure week y 4
Data structure week y 4
 
Data structure week 3
Data structure week 3Data structure week 3
Data structure week 3
 
Data structure week 2
Data structure week 2Data structure week 2
Data structure week 2
 
Data structure week 1
Data structure week 1Data structure week 1
Data structure week 1
 
12. stl örnekler
12.  stl örnekler12.  stl örnekler
12. stl örnekler
 
Devre analizi defter
Devre analizi defterDevre analizi defter
Devre analizi defter
 
H12 blm221
H12 blm221H12 blm221
H12 blm221
 
H11 blm221
H11 blm221H11 blm221
H11 blm221
 
H9 blm221
H9 blm221H9 blm221
H9 blm221
 
H8 blm221 multiplexer-decoder-bellekler
H8 blm221 multiplexer-decoder-belleklerH8 blm221 multiplexer-decoder-bellekler
H8 blm221 multiplexer-decoder-bellekler
 
H8 blm221 (1)
H8 blm221 (1)H8 blm221 (1)
H8 blm221 (1)
 

1. nesneye dayalı programlama giriş

  • 1. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi 1. HAFTA
  • 2. BLM225 Nesneye Dayalı Programlama 2 Dersin Adı : Nesneye Dayalı Programlama Bu dersi alan öğrenci Nesneye dayalı programlama kavramını ve altında yatan düşünce mantığını analayacak, C++ dilini kullanarak Sınıf tanımlarını yapabilecek, Kendi oluşturduğu Sınıfları, Mevcut Sınıfları ve Şablonları tekrar kullanarak Nesneye Yönelik Programlar yazabilecektir. Konular Nesneye Dayalı Programlamaya giriş C++ programlama dilinin Temelleri, Döngü ve Kararlar, Fonksiyonlar Yapılar (Struct) Sınıf (Class) yapısı, Kullanımı ve Özellikleri Kurucu (constructor) ve Yokedici fonksiyonlar (destructor) Nesnelerin fonksiyonlara parametre olarak gönderilmesi Operatörlere yeni işlevlerin yüklenmesi (operator overloading) Kalıtım (Inheritance) Kalıtımın kurucu ve yok ediciler üzerindeki etkisi Çoklu kalıtım (multiple inheritance) Nesne işaretçileri (pointers to objects) Çok Şekillilik (Polymorphism) Sıra Dışı Durumlar (Exceptions) Şablonlar (Templates) Kaynaklar: 1. Object Oriented Programming in C++, Robert Lafore, Fourth Edition, Sams Publishing, 2002, (Kitabın türkçe çevirisi bulunmakta, Nesne Yönelimli C++ Programlama Kılavuzu, Robert Lafore, Alfa yayınları) 2. C++ How to Program, Seventh edition, Harvey M. Deitel and Paul J. Deitel, Deitel & Associates, Inc. 2010.(Kitabın türkçe çevirisi bulunmakta, C ve C++, Deitel & Deitel, Sistem yayıncılık) 3. Thinking in C++ (Free Electronic Book), Bruce Eckel, 2nd ed., Vol. 1 and Vol.2, Prentice-Hall, 2000 and 2003. 4. C++ ve Nesneye Yönelik Programlama, M. Erhan SARIDOĞAN, Papatya yayıncılık, 2004 5. C++ ile Nesne Tabanlı programlama, Bora GÜNGÖREN, Seçkin yayıncılık, 2001 İnternet Kaynakları 6. http://www.buzluca.com/cpp/notlar.html 7. http://www.functionx.com/cpp/ 8. http://web.itu.edu.tr/~mscelebi/cpp/index.html 9. http://web.itu.edu.tr/~uyar/programlama/c.pdf 10. http://www.cplusplus.com/doc/tutorial/introduction/ 11. http://sundog97.tripod.com/tutorial_cpp/index.html Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 2
  • 3. BLM225 Nesneye Dayalı Programlama 3 1. Giriş Programlama, Yaşadığımız gerçek dünyadaki problemlerin çözümlerinin bilgisayarda ifade edilmesidir. Programcılar problemlerin çözümleri ile ilgili kavramları, varlıkları kullandıkları programlama dili ile ifade ederler[1]. Programlama teknikleri şu şekilde sıralanabilir [7]. Yapısal olmayan programlama Yapısal programlama Nesne Yönelimli programlama Görsel Programlama Yapısal olmayan programlama Bu yöntemde program bir tek ana program yer alır. Ana program ard arda gelen komut dizilerinden oluşur. Altprogramlar ve bloklama yoktur. Ana program içinde kullanılan komutlar global olarak tanımlanmış değişkenlere erişerek kullanırlar. Programlar büyüdükçe tanımlanan değişkenlerin bozulması mümkün olabilmektedir. Ayrıca program için kullanılan ve ard arda gelen komut dizilerini tekrar kullanmak gerektiğinde bu komut dizilerini tekrar uygun yere kopyalayıp kullanmak gerekmektedir. Bu ise program boyunu gereksiz yere uzatmaktadır. Programın okunabilirliğini, anlaşılabilirliğini azaltmakta ve hataları bulmayı zorlaştırmaktadır. Şekil 1. Yapısal olmayan programlama Yapısal (structural) programlama Procedural (işleve dayalı, altprogram kullanmaya dayalı) programlama olarak da ifade edilebilir. Bu programlama yönteminde bloklar halinde program yazma ve altprogramların kullanımı ön plana çıkmaktadır. Altprogram(procedure, subroutine) ve Fonksiyonlar(Function) küçük farklarla benzer kavramları ifade etmektedirler. Her ikisi de belirli bir amaca yönelik işlemleri yerine getiren program parçacıklarıdır. İhtiyac duyulan her noktada ana program akışı içinde herhangi bir noktadan isimleri yazılarak defalarca çağrılıp kullanılabilirler. Ana program sıralı bir şekilde değişik altprogramların çağrılıp kullanılması ile oluşturulur. Ana programdan altprograma veri işlenmek üzere gönderilir. Altprogram bunu işleyerek anaprograma tekrar geri dönderir. Altprogramlar bir kez hatasız bir şekilde yazıldıktan sonra defalarca kullanılabilir. Bir hata oluştuğunda hatanın kaynağını bulmak daha kolaydır. Programın anlaşılabilirliği, okunabilirliği daha yüksektir. Ancak Şekil 2’ de görüldüğü gibi global verilere erişimde bir sınırlama getirilmemiştir. Veriler ve bu veriler üzerinde işlem yapan fonksiyonlar ayrı ayrı düşünülmüştür. Verilerin bozulmasına karşı herhangi bir önlem alınmadığından veri güvenliği yetersizdir. Bu yöntemde verilerden ziyade fonksiyonlara ağırlık verilmektedir. Tasarım aşamasında ilk sorulan soru program ne iş yapacak sorusudur. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 3
  • 4. BLM225 Nesneye Dayalı Programlama 4 Şekil 2 Fonksiyonların Global değişkenlere erişimi Nesneye Yönelimli programlama(NYP) Nesne Yönelimli Programla yöntemi uzun ve karmaşık programlar geliştirmek için tasarlanmıştır. Günümüzde bilgisayarda çözülmek istenen problemler eskiye oranla daha karmaşık ve büyüktür. Programlar uzadıkça, problemi analiz etmek ve çözmek zorlaşmaktadır. Donanım maliyetleri düşerken yazılım maliyeti artmaktadır. Daha Güvenilir, dayanıklı, esnek, geliştirilebilir, Tekrar kullanılabilir ve daha kolay bakımı yapılabilen kaliteli programlar yazabilmek için yazılım problemlerine Nesne Yönelimli Analiz ile yaklaşmak daha fazla avantajlar sağlamaktadır. Şekil 1.5 de Nesne Yönelimli yaklaşım görülmektedir. NYP yönteminde veriler ve bu veriler üzerinde işlem yapan fonksiyonlar bir araya getirilerek nesne (object) adı verilen bir yapı oluşturulmuştur. Nesneler birbirleri ile mesaj göndererek haberleşebilirler. Her bir nesnenin verilerle ifade edilen Nitelikleri(özellikleri), ve Fonksiyonlarla ifade edilen (Davranışları) bulunur. Veri ve fonksiyonların bir arada bulunmasına Paketleme(Encaptulation) adı verilir. Verilerin diğer nesnelerden gizlenebilmesi veya erişiminin kısıtlanması mümkündür. Buna veri gizleme(data hiding) denilmektedir. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 4
  • 5. BLM225 Nesneye Dayalı Programlama 5 Şekil 3 Nesne yönelimli yaklaşım Nesne yönelimli programlamada programları güncellemek veya yeni eklentiler yapmak daha kolaydır. Nesne yönelimli programlama yönteminde sistem içinde bir çok nesne yer alır. Bu nesneler birbirlerinden farklı özellikler taşıyabildikleri gibi aynı veya benzer özellikler de taşıyabilirler. Nesneye dayalı programlamada tasarım yapılırken öncelikle veriler esas alınır. Nesne Yönelimli programlamada Paketleme(Encaptulation), Soyutlama(Abstraction), Türeme (Derivation), Miras alma veya Kalitim (Inheritence) gibi kavramlar yer almaktadır. Neler nesne olarak modellenebilir. Memur, müdür, Öğretmen, Öğrenci, …. Nokta, Çizgi, Çember, Silindir, …. Matris, Vektörler, Karmaşık sayı,… Çerçeve, menü, Pencere,… Nesneye dayalı yöntemin değerlendirilmesi. Problemlerin çözümüne ilişkin daha gerçekçi bir model oluşturulabilir. Oluşturulan bir nesne daha sonra defalarca tekrar kullanılabilir(reusability) Programları güncellemek, hataları bulmak, bakımını yapmak daha kolaydır Ekip çalışmaları için uygundur. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 5
  • 6. BLM225 Nesneye Dayalı Programlama 6 1.2 C++ programlama dili C++ Dilinin Tarihsel Gelişimi C Programlama dili genel amaçlı orta seviyeli ve yapısal bir programlama dilidir. 1972 yılında Dennis Ritchie tarafından Bell Laboratuarında Unix işletim sistemi ile kullanılmak için tasarlanmıştır. C, özellikle sistem programlamada sembolik makine dili (Asembly) göre tercih edilmektedir. İşletim sistemleri, derleyiciler ve debug gibi aşağı seviyeli sistem programlarının yazılımında yoğun olarak C programlama dili kullanılır. C++ dili C diline bazı özelliklerin eklenmesi ile Bjarne Stroustroup tarafindan BELL laboratuarlarında gelistirilmistir. 1983 ilk C++ derleyicisi sunulmuştur. 1998 ISO C++ dili standartlari kabul edilmiştir. Neden C++ -Daha iyi bir C dir. C dilinin bir üst kümesi olduğundan bu dilin hemen hemen bütün özelliklerini destekler -Veri Soyutlamasını destekler -Nesne yönelimli programlamayı destekler -Geliştirilebilir programlamayı destekler[1] -Çok sayıda kaynak dokümana sahiptir . C++ İle Programlamaya Giriş C++ programlama dilini öğrenmeye basit bir program yazarak başlayalım. Aşağıda “Hello.cpp” olarak bilgisayara kaydedilen bir program görülmektedir.Bu program ekrana “Hello World” Türkçesi “Merhaba Dünya” anlamına gelen kelimeleri yazmaktadır. Şekil 2.1 Basit bir C++ programı Programın ekran çıktısı şu şekildedir. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 6 // Hello.cpp // Ekrana " Hello World” yazan program #include <iostream> using namespace std; int main() { cout << " Hello Worldn"; getch(); return 0; }
  • 7. BLM225 Nesneye Dayalı Programlama 7 Programın açıklaması C dilinde yazılan programları uzantısı “ .c” ve C++ dilinde yazılan programların uzantısı “.cpp” dir. "//" işareti açıklama(yorum) satırlarını ifade etmektedir. C++ derleyicisi bu işaretle başlayan satırları dikkate almaz. Birden fazla satırı iptal etmek veya açıklama satırı olarak göstermek için bunları da “/*” ve “*/” işaretleri arasına almak gerekir. #include <iostream.h> satırı C++ da bulunan ve ismi belirtilerek istenilen kütüphane dosyasını programa dahil etmek için kullanılmıştır. Burada <iostream.h> kütüphane dosyası programa dahil edilmektedir. Bu dosya içinde cout ve cin komutları bulunmaktadır. Cout ve cin komutlarını kullanabilmek için bu kutuphane dosyası programa dahil edilmek zorundadır. “.h” ile biten dosyalar kütüphane dosyalarıdır. C++ da ki hazır kütüphanelerde bir çok hazır fonksiyonlar vardır. Her C++ programında mutlaka bir main() isimli ana fonksiyon yer almak zorundadır. Program main() fonksiyonundan itibaren çaşlıştırılmaya başlanır. Main() fonksiyonunun önünde yer alan “int” ifadesi main() fonksiyonunun dönüş tipini göstermektedir. Yani bu fonksiyon geriye int(tamsayı) bir değer döndermektedir. Dolayısı ile “return 0” ifadesi ile geriye 0 değeri dönderilmektedir. Cout komutu ekrana bir değeri veya cümleyi yazdırmak için kullanılan bir komut(fonkiyon)dur. C++ da ana fonksiyondan hemen sonra yer alan komutlar " { } " parantezleri arasına yazılır. Önemli bir nokta ise C++ dilinde her komut " ; " ile bitmek zorundadır. " Hello Worldn" cümlesinin sonunda yer alan " n " karakterleri imleci bir sonraki satıra konumlandırmak için kullanılmaktadır. Bu şekilde kullanılan karekter sabitleri ve ne için kullanıldıkları aşağıda görülmektedir. Tanım '0' NULL karakter 'a' çan sesi (alert) 'b' geri boşluk (back space) 't' tab karakteri (tab) 'n' aşağı satır (new line) 'v' düşey tab (vertical tab) 'f' sayfa ileri (form feed) 'r' satır başı (carriage return) '"' çift tırnak (double quote) '' ters bölü (back slash) " n " karekter sabiti kullanmadan aşağıdaki komut da aynı işlevi görmektedir. “endl” komutu bir alt satıra imleci konumlandırır. cout << " Hello World"<<endl; Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 7
  • 8. BLM225 Nesneye Dayalı Programlama 8 C++ dilinin genel yapısı aşağıda verilen örnek programla daha iyi anlaşılacaktır. Şekil 2.2 Bir C++ programının yapısı Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 8 // Ornek1.cpp // C++ da genel program yapısı. #include <iostream> #define pi 3.14; const int max=10; int a,b; float ort; int OrtalamaHesapla(int vize1, int final1) { float ortalama; ortalama=vize1*0.4+final1*0.6; return ortalama; } int main() // main fonksiyonundan program çalışmaya başlar { int vize; int final; std::cout << "Vize notunu giriniz :"; //Ekrana yaz std::cin>>vize; //Klavyeden giriş std::cout << "Final notunu giriniz :"; std::cin>>final; ort=OrtalamaHesapla(vize,final); std::cout << "Ortalama notu = "<<ort; getch(); return 0; // programın başarılı bir şekilde // sonlandığını belirtir. } // main fonksiyonu sonu Program başlığı Program ile ilgili Açıklamalar Kullanılan kütüphane dosyaları Global Değişken ve sabitler Programcının Tanımladığı “OrtalamaHesapla” İsimli Fonksiyon Yerel değişkenler AnaProgramBloğu Yerel değişken
  • 9. BLM225 Nesneye Dayalı Programlama 9 Programın ekran çıktısı Bir C++ programı sırası ile aşağıdaki bölümlerden oluşur. Program başlığı, program ile ilgili açıklamalar Kullanılan kütüphane dosyaları Global değişken tanımları Programcının tanımladığı fonksiyonlar Main fonksiyonu ana program bloğu Şimdi bu bölümleri kısaca açıklayalım. Program başlığı, program ile ilgili açıklamalar Bu kısımda yazılan program ile ilgili açıklamalar, programı kimin yazdığı, yazım tarihi, amacı gibi açıklamalar yazılır. Yazımı zorunlu olmamakla birlikte tavsiye edilmektedir. Kullanılan kütüphane dosyaları Bu bölümde programda kullanılacak kütüphane dosyalarının isimleri yazılır. Global değişken tanımları Değişkenler Programın içerisinde farklı değerler alabilen, değeri değiştirilebilen semboler değişken olarak tanımlanır. Bu semboller aslında bilgisayar belleğinde verinin saklandığı yeri ifade ederler. Dolayısı ile bu alana yerleştirilecek veri de sürekli olarak değişebilir. Değişkenleri global ve yerel değişkenler olarak iki gruba ayırmak mümkündür. Global değişkenler main() fonksiyonu dışında programın baş kısmında tanımlanan değişkenlerdir. Bu değişkenler programcının tanımladığı tüm fonksiyonlar ve ana program bloğu içinden erişilip kullanılabilir. Başka bir ifade ile programın her yerinde faaliyet gösterebilen, geçerli olan değişkenlerdir. Birden fazla fonksiyon aynı isimli global değişkene erişip kullanabilir.Bu durum program hatalarına neden olabilir. Yerel değişkenler Bir fonksiyon içinde ya da bir program bloğu içinde tanımlanan değişkenlerdir. Main() fonksiyonu içinde tanımlanan değişkenler de yerel değişkenlerdir. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 9
  • 10. BLM225 Nesneye Dayalı Programlama 10 Değişkenler aşağıdaki şekilde tanımlanır. [Veri Tipi] [Değişken Adı]; Örnek: char c; int sayi; float f; double d; unsigned int k; string adsoy; Veri Tipleri Sayısal veri tipleri Karakter veri tipi Mantıksal veri tipi String (Karakter dizisi) veri tipi Sayısal veri tipleri(Tamsayı,Gerçek) Tamsayi veri tipi (char, int, long) Tamsayı değerler alırlar. Aşağıdaki tabloda tamsayı veri türleri görülmektedir. TÜR İSMİ UZUNLUK(byte) SINIR DEĞERLERİ char 1 -128 127 unsigned char 1 0 255 int 2 -32.768 32.767 unsigned int 2 0 65.535 long 4 -2.147.483.648 2.147.483.647 unsigned long 4 0 4.294.967.296 1. char tipi Tamsayı değerler alır. 8 bit uzunluğundadır. Bellekte 1 bayt yer kaplar. -128 ile +127 arasında değer alır. Unsigned : 0 ile 255 arasında değer alır. 2.int tipi Tamsayı değerler alır. 16 bit uzunluğunda ifade edilirler. Bellekte 2 Bayt kaplarlar. -32768 ile +32767 arasinda değer alır. unsigned: 0 ile 65535 arasinda değer alır. Örnek: int i; i değişkeni tam sayı türündendir. 3, -7 gibi değerler alabilir. 3. Long tip. Tamsayı değerler alır. 32 bit uzunluğundadır. -2147483648 ile +2177483647 arasinda değer alır, unsigned: 0 ile 65535 arasinda değer alır. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 10
  • 11. BLM225 Nesneye Dayalı Programlama 11 Gerçek Tipler (Float, Double) Gerçek (noktalı, küsüratlı) sayıları içerirler. float : Bellekte 4 Byte yer tutar. -3.4xE38 ile . +3.4xE38 aralığında değer alır. Hassasiyet 7-8 basamaktır. double : Bellekte 8 Byte ter tutar. . -1.7xE308 ile . 1.7xE+308 aralığında değer alır. Hassasiyet 15-16 basamaktır. “ Karakter tipi (char) Char: Tek bir karakter değer alır. '0’,’1’,’2’,... ' ‘a’, ‘8’ , ‘%’ , ‘+’ , ‘F’ gibi değerler alır. Aynı zamanda 8 bit uzunluğunda tamsayı değerler de alabilir. Ancak bir harfi veya klavyeden basılacak bir tuşu değer olarak bir değişkene atamak istenirse char olarak tanımlanır. Mantıksal veri tipi(Bool) Bool: true(dogru) = 1 veya false(yanlis) = 0 değerini alır. Eski derleyiciler bu türü desteklemeyebilir. Yeni ANSI C++ standardında eklenmiştir. String (Karakter dizisi) veri tipi Bir ismi veya bir cümleyi bir değişkene atamak gerekirse bu değişken string olarak tanımlanır. Örnek: “ali”, “bu gün hava güzel” gibi değerlerbu değişkene atanabilir. String veri tipini kullanabilmek için #include <string> kütüphane dosyasının programa eklenmesi gerekmektedir. Değişkenlere ilk değerleri tanımlandıkları anda da verilebilir. Örnekler: int a=5; float f=3.14; string adsoy=”Ali Demir”; bool onay=true; char ch=’A’; int a=5; float f=3.14; string adsoy="Ali Demir"; bool onay=false; char ch='A'; cout<<ch<<endl; cout<<a<<" "<<f<<" "<<adsoy<<endl; if (onay==!true) cout<<"tamamdir"; Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 11
  • 12. BLM225 Nesneye Dayalı Programlama 12 else cout<< "sorun var"; Operatörler Bir değişkene değer atamak, bir işlem yapmak veya iki değişkeni karşılaştırmak gibi işlemler yapmak için kullanılan ‘=’, ‘+’, ‘>’ gibi sembollerdir. C++ da kullanılan Operatörleri öncelikle türlerine göre şu şekildedir. 1) Aritmetiksel operatörler + , - , * , / , % , ++ , -- 2) Karşılaştırma operatörleri < , > , <=, >= , ==, != 3) Atama operatörleri = , += , -=, *= , /= , %= , <=, >>=, &=, != , ^= 4) Mantıksal Operatörler ! , || , && 5) Bit bazında işlem yapan operatörler & , | , ^ , ~ Şekil 2.3 de operatörlerin kullanımı ile ilgili bir örnek program verilmiştir. Bu programda atama “=”, çarpma “*” ve toplama”+” ile karşılaştırma “>=”, “<” operatöreleri kullanılmıştır. Artırma ve Azaltma operatörleri “++” artırma operatörüdür. “--“ azaltma operatörüdür. Önünde veya sonunda bulunduğu değişkenin değerini bir artırmak veya azaltmak için kullanılır. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 12 //Vize ve final notlarinindan geçme notunu hesaplama #include <iostream> #include <conio.h> int main() { int vize, final; double ort; vize = 43; //atama operatörü final = 80; ort = vize * 0.4 + final * 0.6; //Çarpma ve toplama operatörü std::cout<< "Gecme notunuz: " << ort; if(ort>=65) std::cout<<"nGectiniz n"; //Karşılaştırma operatörü if(ort<65) std::cout<<"nKaldinizn"; getch(); return 0; // artırazalt.cpp // x i bir arttırıp y yi bir azaltarak çarpar #include <conio.h> #include <iostream.h> #include <iostream> using namespace std; main() { int x = 4; int y = 8; cout << "x = " <<x << endl; cout << "y = " << y << endl; cout <<"++x * --y = " << ++x * --y ; getch(); return 0; }
  • 13. BLM225 Nesneye Dayalı Programlama 13 Programın ekran çıktısı " endl " komutu satır sonunu belirterek yeni satıra geçmemizi sağlar, bir nevi "n " sembolü gibi bir işleve sahiptir. Seviye Operatör Tanım Öncelik Yönü (associativity) 1 :: Kapsam(scope) ( ) öncelik kazandırma ve fonksiyon çağırma soldan sağa [ ] indis operatörü (subscript) . yapı elemanına ulaşım (structure access) -> yapı elemanına gösterici ile ulaşım 2 + işaret operatörü (unary) sağdan sola - işaret operatörü (unary) ++ 1 artırma (increment) -- 1 eksiltme (decrement) ~ bitsel değil (bitwise not) ! mantıksal değil (logical not) * içerik operatörü (indirection) & adres operatörü (address of) sizeof sizeof operatörü 3 * çarpma (multiplication) soldan sağa / bölme (division) % modulus (bölümden kalan) 4 + toplama (addition) soldan sağa - çıkarma (suntraction) 5 << bitsel sola kaydırma (bitwise shift left) soldan sağa >> bitsel saga kaydırma (bitwise shift right) 6 < küçüktür (less than) soldan sağa > büyüktür (greater than) <= küçük eşittir (less than or equal) >= büyük eşittir (greater than or equal) 7 = = eşittir (equal) soldan sağa Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 13
  • 14. BLM225 Nesneye Dayalı Programlama 14 != eşit değildir (not equal to) 8 & bitsel VE (bitwise AND) soldan sağa 9 ^ bitsel EXOR (bitwise EXOR) soldan sağa 10 | bitsel VEYA (bitwise OR) soldan sağa 11 && mantıksal VE (logical AND) soldan sağa 12 || mantıksal VEYA (logical OR) soldan sağa 13 ?: koşul operatörü (conditional operator) sağdan sola 14 = atama (assignement) sağdan sola += işlemli atama (assignment addition) -= işlemli atama (assignment subtraction) *= işlemli atama (assignment multiplication) /= işlemli atama (assignment division) %= işlemli atama (assignment modulus) <<= işlemli atama (assignment shift left) >>= işlemli atama (assignment shift right) &= işlemli atama (assignment bitwise AND) |= işlemli atama (assignment bitwise OR) ^= işlemli atama (assignment bitwise EXOR) 15 , virgül operatörü (comma) Operatörlerin öncelik sıralarına göre aşağıda verilen işlemi inceleyelim. *,/, % operatörleri aynı önceliğe sahip olmalarına karşın, öncelik sırası soldan sağa doğru olduğundan Öncelikle p*r işlemi, daha sonra şekle göre 2 numaralı işlem(%) daha sonra bölme işlemi şeklinde verilen sırada işlemler gerçekleştirilecektir. Bir başka örnek işlem sırasını inceleyin Program Kontrol ve Döngü Komutları if Komutu Belirli bir şarta bağlı olarak bir işlem veya işlemlerin yapılmasını sağlamak amacı ile kullanılan karşılalştırma komutudur. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 14 if (şart) { Komut1; Komut2; ... } if ( şart ) { komut1; komut2; ... } else { komut1; komut2; ... }
  • 15. BLM225 Nesneye Dayalı Programlama 15 Şeklinde bir kullanıma sahiptir. Örnek olarak notu 50 den büyük ise ekrana Geçtiniz yazan if komutu aşağıda gösterildiği gibidir. if ( not >= 50 ) cout << "Geçtiniz!"; Notu 50 den buyuk ve 70 den kuçuk ise ekrana iyi değilse zayıf yazan if komutu aşağıdaki gibidir. if ( not > 50 && not <70) cout << "iyi!"; else cout << "zayıf!"; Switch-case Komutları Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 15 //pozitif.cpp main() { int x; cout << "Bir sayı girin:" ; cin>> x; if ( x > 0 ) cout << "n Pozitif" ; else cout<< “n negatif” return 0; }
  • 16. BLM225 Nesneye Dayalı Programlama 16 Switch Case deyimi bir çeşit if komutu gibidir. Kontrol değişkeninin aldığı değere göre istenen komutları işlemeye yarar. işlev bakımından if deyimine çok benzemektedir. Değişken değeri sabit1’e eşit ise komut1, . Değişken değeri sabit2’e Eşit ise komut2 vb. İşlem görür. Hicbir komut işlem görmemiş ise default ifadesi altındaki komutlar işlem görecektir. switch( Kontrol Değişkeni ) { case Sabit1 : komut1; break; case Sabit2 : komut2; break; . . . default : Komut; } switch örneği if-else eşdeğeri #include <iostream> using namespace std; int main() { int x; cout<< " Bir sayı giriniz:"; cin>>x; switch (x) { case 1: cout << "x değeri 1"; break; case 2: cout << "x değeri 2"; break; default: cout << "x 1 ve 2 den farkli "; } return 0; } . . . int x; cout<< " Bir sayı giriniz:"; cin>>x; if (x == 1) { cout << "x değeri 1"; } else if (x == 2) { cout << "x değeri 2"; } else { cout << "x 1 ve 2 den farklı "; } . . . Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 16
  • 17. BLM225 Nesneye Dayalı Programlama 17 Döngü Komutları Bir ya da birden fazla komutun istenen sayıda veya belirli bir şart gerçekleşinceye kadar çalıştırılması istenirse döngü komutlarından yararlanılır. For döngüsü, while döngüsü, do-while döngüsü C++ da kullanılan döngülerdir. For döngüsü İşlemin kaç defa tekrar edeceği önceden belli ise for döngüsü kullanılır. for (baslangıc; bitiş şartı; artım) Komutlar; örnek: 1 den 100 e kadar olan for dongusu şu şekilde yazılmalıdır. for (j=0; j<100; j++) Komutlar; For döngüsü için aşağıdaki örnekleri inceleyiniz. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 17 //toplam.cpp //for döngüsüyle 1 den 100 e kadar // sayıların toplamını bulan program. #include <iostream> int main() { int top; top=0; for (int j=1; j<=100; j++) { top=top+j; } cout<<"toplam = "<< top; return 0; } //factoriyel.cpp //for döngüsüyle faktöriyel hesap. #include <iostream> int main() { int fak, sayi; cout<<"Sayıyı giriniz: "; cin>>sayi; fak=1; for (int j=1; j<=sayi; j++) { fak=fak*j; } cout<<"Sonuc: "<< fak; return 0; }
  • 18. BLM225 Nesneye Dayalı Programlama 18 While ve do-while döngüsü While döngüsü, döngü sayısının belli olmadığı zamanlarda kullanılır.Aşağıa verildiği şekilde kullanılır. While döngüsü, parantez içinde verilen şart doğru olduğu sürece altındaki komut veya komut bloğu yürütülür. Eğer yanlış ise kontrol bir sonraki komut veya komut bloğuna geçer. do-while döngüsünün while döngüsünden farkı döngünün devam edebilmesi için gerekli olan şart kontrolünün döngü bloğunun sonunda yapılmasıdır. Dolayısı ile döngü şart yanlış olsa bile bir defa icra edilecektir. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 18 // whileornek.cpp // Klavyeden girilen sayıya kadar olan //sayıları toplar #include <iostream> main() { int x, y; y= 0; cout<< " Bir Sayı Giriniz : "; cin>>x; while (x>0) { y =y+x; x--; } cout<< "Toplam= "<< y; return 0; } // do-whileornek.cpp // Klavyeden girilen sayıya kadar olan //sayıları toplar #include <iostream> main() { int x, y; y= 0; cout<< " Bir Sayı Giriniz : "; cin>>x; do { y =y+x; x--; } while (x>0); cout<< "Toplam= "<< y; return 0; } Do { Komut Komut Komut . Arttırım/azaltım }while( Şart ); while( Şart ) { Komut Komut . Arttırım/azaltım }
  • 19. BLM225 Nesneye Dayalı Programlama 19 Break ve continue Komutu Döngülerden herhangi bir noktada çıkılmak istenirse break komutu kullanılır. Örneğin x değeri 5 olduğunda döngüden çıkmak istenirse if(x==5) break; komutu kullanılabilir. Break komutu for döngüsü dahil bütün döngülerden çıkmayı sağlar. Bu durumda program akışı döngü bloğunun sonundan devam eder. while(1) { }, for(;;) { } döngüleri sonsuz döngüyü ifade eder. Sonsuz döngüden break komutu ile çıkılır. Continue komutu bir döngü içinde çalıştırılırsa, o döngü içinde bulunan tur sona erer ancak döngü devam eder. Diğer bir deyişle, gövdenin içinde bulunan continue komutundan sonra gelen cümleleri atlayarak, döngüyü devam ettirir. Aşağıdaki örnekte ilk programda x=6 olduğunda döngüden tamamen çıkılmaktadır. İkinci programda x=3 olduğunda döngü bir sonraki adımdan devam etmektedir. x=3 olduğu andaki değeri ekrana yazılmayacaktır. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 19 //break komutunun kullanımı #include <conio.h> #include <iostream.h> #include <iostream> using namespace std; main() { for (int x = 1; x <= 20; x++) { if (x == 6) break; cout<< x << " "; } getch(); return 0; } //continue komutunun kullanımı #include <iostream> main() { for(int x=0; x <= 9; x++) { if(x ==3) continue; cout<< x<< “ “; } }
  • 20. BLM225 Nesneye Dayalı Programlama 20 Diziler ve Pointerler Bellekte ardışık bir biçimde bulunan ve aynı türden verilerin oluşturduğu veri yapısına dizi (array) denir. Diziler hafızada bir yer kaplarlar. Programcı, her elemanın tipini ve dizide kaç eleman kullanacağını belirterek bilgisayarın en uygun hafızayı ayırmasını sağlar. Dizi boyutu başlangıçta belirtildikten sonra bellekte dizinin eleman sayısı kadar sıralı olarak yer ayrılır. Dizi boyutu daha sonra program içinde çalışma anında tekrar değiştirilmez. Bu yüzden gerekli olduğunda çalışma hatası ile karşılaşmamak için dizi boyutu aşılıp aşılmadığı kontrol edilmelidir. Dizi tanımlaması şu şekilde yapılır. Veri tipi Dizi ismi [dizi boyutu]; Örnek 10 elemanlı tamsayı türünde A isimli bir dizi tanılmamak istediğimizde aşağıda verilen tanımlamayı yapmak gerekmektedir. int A[10]; float x[100], y[50], z[10]; //x 100 elamanlı, y 50 elemanlı z 10 elemanlı bir dizi #define BOYUT 100 int dizi[BOYUT]; // 100 elemanlı bir dizi a[n] şeklinde tanımlanan bir dizinin ilk elemanı a[0] ve son elemanı a[n-1] dir. Aşağıda verilen for döngüsü dizi içeriğini sıfırlamaktadır. for (i = 0; i < BOYUT; ++i) dizi[i]=0; //Dizinin bütün elemanlarını sıfırlar dizi[5]=78; // dizinin 5. elemanına 78 değeri atanmaktadır. Dizilere tanımlandıkları anda ilk değerleri de verilebilir. Örnekler: double sample[5] = {1.3, 2.5, 3.5, 5.8, 6.0}; double sample[] = {1.3, 2.5, 3.5, 5.8, 6.0}; char str[4] = {‘d’, ‘i’, ‘z’, ‘i’}; unsigned veri[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 20
  • 21. BLM225 Nesneye Dayalı Programlama 21 Dizilere yukarıdaki gibi ilk değer verildiğinde, verilen değerler dizinin ilk elemanından başlayarak dizi elemanlarına sırayla atanmış olur. Dizilerin tüm elemanlarına ilk değer verme zorunluluğu yoktur. Dizinin eleman sayısından daha az sayıda elemana ilk değer verilmesi durumunda kalan elemanlara otomatik olarak 0 değeri atanmış olur. int a[20] = {0}; //yalnızca dizinin ilk elemanına 0 değeri vermekle derleyici dizinin kalan elemanlarına otomatik olarak 0 değeri atayacaktır. dizi elemanlarına ilk değer verme işleminde dizi uzunluğu belirtilmeyebilir, bu durumda derleyici dizi uzunluğunu verilen ilk değerleri sayarak kendi hesaplar ve dizinin o uzunlukta açıldığını kabul eder. Örneğin : int sample[] = {1, 2, 3, 4, 5}; derleyici yukarıdaki ifadeyi gördüğünde sample dizisinin 5 elemanlı olduğunu kabul edecektir. başka örnekler : char isim[ ] = {‘S’, ‘a’, ‘l’, ‘i’, ‘h’, ‘0’}; unsigned short count[ ] = {23, 4, 8, 7, 8, 9, 12, 75, 13, 45}; derleyici isim dizisinin uzunluğunu 6, count dizisinin uzunluğunu ise 10 olarak varsayacaktır. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 21 //Dizi kullanımı #include <iostream> int main( ) { int n[10]={32, 27, 64, 18, 95, 14, 90, 70, 60, 37}; cout<< "Eleman Degerin"; for (int i = 0; i <= 9 ;i++) cout<< i<<" "<<n[i]<<endl; getch(); return 0; }
  • 22. BLM225 Nesneye Dayalı Programlama 22 Dizileri Fonksiyonlara giriş olarak göndermek için dizinin ismini parantez kullanmadan belirtilir. Genellikle Diziler fonksiyonlara geçirilirken boyutları da geçirilir. int myDizi[ 24 ]; myFunction( myDizi, 24 ); Göstericiler (İşaretçiler-Pointers) İşaretçi, bellek alanındaki herhangi bir gözün adresinin saklandığı değişkenlerdir. İşaretçiler verileri değil o verilerin bulunduğu yerlerin bellek adreslerini tutarlar. Tüm işaretçilerin bellekte kapladığı alan int boyutundadır. Her değişken bellekte yer kapladığına göre belirli bir adrese sahiptir. Değişkenlerin adresleri, derleyici ve işletim sistemi tarafından ortaklaşa olarak belirlenir. Nesnelerin adresleri program yüklenmeden önce kesin olarak bilinemez ve programcı tarafından da önceden tespit edilemez. Programcı, nesnelerin adreslerini ancak programın çalışması sırasında (run time) öğrenebilir. Örneğin: char ch=’A’; //ASCII kodu belleğe yerleşir 65 int b=0x45; long f=0x12345678; //Hexadesimal değer f değişkenine atanıyor biçiminde bir tanımlamayla karşılaşan derleyici bellekte ch değişkeni için 1 byte, b değişkeni için 2 byte ve f değişkeni için 4 byte yer ayıracaktır. Program çalıştırılarak belleğe yüklenmeden derleyicinin ch değişkeni için bellekte hangi adresi ayıracağını önceden bilmek mümkün değildir. Bu durum b ve f değişkenleri içinde geçerlidir.. Bu ancak programın çalışması sırasında öğrenilebilir. Aşağıda verilen çizimde değişkenler için ayrılan adresler ve içerikleri görülmektedir. Adres İçeriği 1A00 ? ch 1A01 65 1A02 ? b 1A03 45 1A04 00 1A05 ? f 1A06 78 1A07 56 1A08 34 1A09 12 1A0A ? 1A0B ? Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 22
  • 23. BLM225 Nesneye Dayalı Programlama 23 1A0C ? 1A0D ? Göstericiler program içinde tanımlanmış diğer değişkenlerin adreslerini tutan değişkenlerdir. Değişkenlerin adreslerini tutmak ve adreslerle ilgili işlemler yapmak için kullanılır. Göstericilerin içlerinde adres bilgileri bulunur. Bu nedenle gösterici ile adres hemen hemen eş anlamlı olarak düşünülebilir. Tüm göstericilerin bellekte kapladığı alan int boyutundadır Gösterici bildirimlerinin genel biçimi şöyledir: Veri tipi * gösterici ismi; Örnek : float *f; //f değişkeni float türünden bir değişkenin adresini tutacak char *s; //s değişkeni char türünden bir değişkenin adresini tutacak int *dizi; //dizi değişkeni int türünden bir değişkenin adresini tutacak göstericilerle ilgili işlem yaparken kullanılan operatörler şu şekildedir. & ya da adres operatörü, operandının adresini döndüren bir tekli operatördür. * operatörü hem gösterici tanımlanırken kullanılır. hemde göstericinin tuttuğu(sakladığı, buna gösterdiği de denilebilir) adresin içindeki değere ulaşmak için kullanılır. Bu yüzden içerik operatörü olarak ta söylenmektedir. Örneğin, Aşağıda tanımlanan değişkenlerin yukarda verilen şekle göre işlemleri şu şekildedir. char ch=’A’; //ASCII kodu belleğe yerleşir 65 int b=45; long f=0x12345678; //Hexadesimal değer f değişkenine atanıyor aşağıdaki şekilde tanımlanan pointer değişkenlerle ilgili olarak, char *p1; int *p2; long *p3; p1=&ch; //p1=1A01 olur p2=&b; //p2=1A03 olur p3=&f; //p3=1A06 olur işlemleri yapıldıktan sonra char c1; int c2; long c3; c1=*p1; //c1=65 c2=*p2; //c2=45 Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 23
  • 24. BLM225 Nesneye Dayalı Programlama 24 c3=*p3; //c3=0x12345678 olur #include <iostream.h> #include <iostream> using namespace std; int main( ) { int a,b; int *p1,*p2; a=10; b=20; p1=&a; // a değişkeninin ram deki //adresini p1(pointer) değişkeninin içine ata p2=&b; // cout<<*p1<<endl; // p1 pointerının içindeki //adreste bulunan değeri ekranda gösterir cout<<*p2<<endl; getch(); return 0; } 0x11 0x13 a b ----- ------ p1 p2 10 -------- -------- 20 0x11 Ox13 #include <conio.h> #include <iostream.h> #include <iostream> using namespace std; int main( ) { int a,b; int *p1,*p2; p1=&a; p2=&b; a=10; b=20; cout<<a<<endl; cout<<b<<endl; cout<<&a<<endl; cout<<&b<<endl; cout<<p1<<endl; cout<<p2<<endl; cout<<*p1<<endl; cout<<*p2<<endl; getch(); Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 24
  • 25. BLM225 Nesneye Dayalı Programlama 25 return 0; } int main() { int *p1; //no initialization. // int a; // p1=&a; *p1 = 3; //Possible segfault. cout<<*p1<<endl; getch(); } #include <conio.h> #include <iostream.h> #include <iostream> #include <string> using namespace std; struct A { virtual void f() { cout << "A::f();n"; } }; int main() { A* a = new A(); delete a; a->f(); //Could cause a segfault. getch(); } void rcv() { int b; int *x = 0; x=&b; *x = 3; } int main() { Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 25
  • 26. BLM225 Nesneye Dayalı Programlama 26 cout<<rcv(); getch(); return 0; } int rcv() { int b; int *x = 0; x=&b; *x = 3; return *x; } int main() { cout<<rcv(); getch(); return 0; } Gösterici Aritmetiği Bazen göstericinin işaret etttiği adresten ileri ya da geri gitmek gerekebilir. int *a; float *b;; char *c; Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 26
  • 27. BLM225 Nesneye Dayalı Programlama 27 a++ denildiğinde a nın değeri int tipli bir değişkeni işaret ettiğinden int değişkenin belllekte kapladığı alan (2) kadar artar. Benzer olarak b++ denildiğinde b’nin değeri 4 artacaktır. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 27 // Göstericiler * ve & operatörünü kullanmak #include <iostream> int main() { int a; int *aPtr; //aPTr bir tamsayı göstericisi a = 7; aPtr = &a; // a değiskeninin adresi aPtr ye atanıyor. cout << "a nin adresi : " << &a << "n aPtr degeri : " << aPtr; cout << "nn a nin degeri : " << a << "n *aPtr nin degeri " << *aPtr; cout << "nn &*aPtr = " << &*aPtr // *ve & ikisi birlikte kullanımı << "n *&aPtr = " << *&aPtr << endl; // yerleri fark etmez return 0; }