3 Mart 2018 Cumartesi

Operatörlerin Aşırı Yüklenmesi (Overloading)


    Operatörlere bilinen özellikleri dışında başka özellikler kazandırmak mümkündür. C++ da bu işleme operatörlerin aşırı yüklenmesi adı verilmektedir. 

    Bir operatörü aşırı yüklemek için öncelikle bir operatör fonksiyonu oluşturmamız gerekmektedir. Genellikle bu fonksiyonlar tanımlandıkları sınıfın bir üyesidir. Bu fonksiyonları şu şekilde tanımlayabiliriz: 

                          tür sınıf adı :: operatör operatör ( argüman listesi)
                          {
                              ...
                           }

    Her operatöre aşırı yükleme yapamayız. Bu operatörler şunlardır: ".", "::", "?". Ayrıca ön işlemci operatörlerine de aşırı yükleme yapılamamaktadır. 

    Eğer bir aritmetik operatöre aşırı yükleme yapmak istiyorsak yine bir operatör fonksiyonu tanımlamamız gerekir. Örneğin + operatörüne başka bir görev yüklemek istiyoruz. Bunun için operatör+ fonksiyonunu tanımlamamız gerekir. Buna benzer şekilde -, *, / işaretlerine de normalde olan görevleri dışında başka  görevlerde yüklenebilir.

Tablo1. Aşırı yükleme yapılabilecek aritmetik operatörler
Operatör
Anlamı
+
Toplama
-
Çıkarma
*
Çarpma
/
Bölme
%
Bölme işleminde kalan
++
Bir artırma
--
Bir azaltma

     Benzer bir şekilde karşılaştırma operatörlerine ve mantıksal operatörlere aşırı yükleme yapılabilir.

Tablo 2. Aşırı yükleme yapılabilecek karşılaştırma operatörleri
Operatör
Anlamı
==
Eşit mi?
!=
Farklı mı?
> 
Büyük mü?
< 
Küçük mü?
>=
Büyük veya eşit mi?
<=
Küçük veya eşit mi?

Tablo 3. Aşırı yükleme yapılabilecek mantıksal operatörler
Operatör
Anlamı
&&
Ve
||
Veya
!
Değil

    Normalde aşırı yükleme yapılacağı zaman operatör fonksiyonları tanımlandıkları sınıfa ilişkin olarak bir nesne döndürmesi gerekiyordu. Ama karşılaştırma ve mantıksal operatörlerde aşırı yükleme yapılırken buna gerek duyulmaz. Bunun yerine "doğru" ya da "yanlış" ya da başka bir deyişle 1 veya 0 değerlerini ifade edebilecek bir tamsayı döndürülür.

    Artırma ve eksiltme işlemlerinde kullanılan ++ ve -- operatörleri, aynı aritmetik operatörlerde olduğu gibi aşırı yüklenebilirler. Ancak aritmetik operatörler iki terim arasında kullanılmasına karşın; artırma  ve eksiltme operatörleri tek terim için kullanılırlar. Bu operatörlere ilişkin üye fonksiyonu herhangi bir parametre almaz.

24 Şubat 2018 Cumartesi

Virtual Fonksiyon Nedir?


    Virtual fonksiyon, Türkçe anlamıyla sanal işlev, türetilmiş sınıflarda yeniden tanımlamayı umduğunuz temel sınıftaki üye işlevdir.
Sanal Fonksiyona neden ihtiyaç duyulur ?


     Sanal fonksiyonları çok biçimli programlama tekniği (polymorphism) ile kullanılır. Bir sınıfın fonksiyonunun miras alan diğer sınıflar tarafından kullanılmasını sağlamak için virtual anahtar kelimesiyle tanımlarız. Bunun nedenini bir örnek ile açıklayayım. Diyelim ki bir dikdörtgen sınıfımız var. Bu sınıf için alan hesaplayabiliriz, çizim yaptırabiliriz , çevre hesaplayabiliriz. Diğer bir sınıf olan kare ise dikdörtgen’den miras alsın. Kare içinde aynı fonksiyonları kullanabiliriz değil mi ? Bunu yapabilmemiz için dikdörtgen sınıfımızdaki fonksiyonlarımızı virtual anahtar kelimesiyle deklare etmemiz gerekir yani prototiplerini virtual ön eki ile yazarız.

   Farklı bir örneğin koduyla virtual fonksiyonun kullanımını görelim.

17 Şubat 2018 Cumartesi

Sınıf Tanımları

Sınıflar nesne yönelimli programlamayı destekleyen ve genellikle kullanıcı tanımlı türler olarak adlandırılan C++' nın merkezi özelliğidir.
Bir sınıf, bir nesnenin biçimini belirtmek için kullanılır ve veri gösterimini ve bu verileri tek bir düzgün pakete dönüştürmek için kullanılan yöntemleri birleştirir. Bir sınıftaki veri ve işlevlere sınıf üyeleri denir.
Bir sınıf tanımladığınızda, bir veri türü için bir plan tasarlarsınız. Bu aslında herhangi bir veriyi tanımlamaz, ancak sınıf adının anlamını, yani sınıfın bir nesnesinin neye sahip olacağını ve böyle bir nesneyle ilgili hangi işlemleri gerçekleştirebileceğini tanımlar.
Bir sınıf tanımı , sınıf isminin ardındaki anahtar kelime class başlar ; ve bir çift kıvrımlı parantezle devam eder. Bir sınıf tanımı, noktalı virgül veya bildirimlerin bir listesi ile izlenmelidir.
Public: Fonksiyona sınıf içinden ve sınıf dışından erişime izin verir.Ayrıca Kalıtım ile aktarılır.

Private: Bu erişim belirteci işaretlenen öğeye sadece sınıfın içinden erişilebileceği anlamına gelir. Ve bu öğeler kalıtım yoluyla aktarılmaz..

Protected: Bu erişim belirteci işaretlenen öğeye sadece sınıfın içinden erişilebileceği fakat alt sınıflara aktarılabileceği anlamına gelmektedir.


Extends: Eğer sınıfımız başka bir sınıfın alt sınıfı olacaksa extends anahtar sözcüğü ile aktarılır.

15 Şubat 2018 Perşembe

NYP ÖĞELERİ


NYP (Nesne yönelimli programlama)' nın öğeleri 3 tanedir. Bunlar:


1. Sarmalama / Paketleme (Encapsulation)
     Paketlemenin anlamı; sınıfı oluşturan metot ve özelliklerin gerçekleştirme biçiminin, bu sınıfı kullanacak olan kullanıcılardan gizlenmiş olmasıdır.

NESNE = VERİ + METODLAR

şeklinde ifade edilen bağıntı aslında Nesne Yönelimli Programlama'nın temelini açıklamaktadır.Veri (özellikler) ve veri üzerinde işlem yapan kod (metotlar) bir arada bulunur ve nesneyi oluşturur.
 

2. Miras Alma / Kalıtım (Inheritance)
     Nesneye yönelik programlamada, bir nesne, genellikle bir nesne sınıfına ait bir örnektir.
Kendisinden alt sınıf üretilen sınıfa, temel sınıf (base class) veya süper sınıf (super class) veya ana sınıf (parent class) adı verilir.

     Alt sınıfın nesneleri, türetildikleri temel sınıfa ait özellikleri alıyorsa, burada miras alma (inheritance) özelliği vardır denir.

     Bu anlamda, miras alma özellikli bir nesne yönelimli programlama dilinde, bir nesne sınıfından türetilen alt nesne sınıfına ait nesneler, üst sınıfın özelliklerini (properties) ve metodlarını (methods) aynen alırlar. 


3. Çok Biçimlilik (Polymorphism)
     Farklı nesnelerin, aynı mesaja (olaya ya da uyarıma) farklı şekillerde cevap verebilme yeteneğidir.
Her nesne sınıfı, kendi metotlarını paketlediği için ve bu metotlar programın kalan kısmı için gizli olduğundan, farklı sınıflar aynı isimde bazı metotlara sahip olabilirler.

14 Şubat 2018 Çarşamba

Nesne İşaretçileri

İşaretçi, bir değişkenin veya verinin bellekteki adresini tutan bir değişken olarak düşünülür. İşaretçiler bir değişken için değil bir nesne için de kullanılabilir. O zaman nesneye, ona işaret eden bir işaretçi ile erişilebilir. Dikkat edeceğimiz husus ise, nesnelerin üyelerine yapılan başvuruların " ->" operatörü ile yapılmasıdır.
Örnek: Beş adet sayısal değeri bir nesne dizisine yerleştirdikten sonra, bu nesne dizisine bir işaretçi atamak ve bu işaretçi yardımıyla dizinin tüm elemanlarını görüntülemek istiyoruz.


Nesneler İçin "this" İşaretçisi

Bir üye her çağrıldığında, kendisini çağıran nesneye işaret eden bir işaretçiye otomatik olarak aktarılır. Bu işaretçiye " this" ile ulaşılabilir. Bir örnekle bunu anlatalım:

           class testSinif{
                     int puan;
                           ...
           };
Bir üye fonksiyon puan değişkenine bir başlangıç değeri atayabilir:
            puan=100;
Bu ifade aslında şu şekildeki bir ifadenin kısa gösterimidir:
            this -> puan=100;

11 Şubat 2018 Pazar

Basit Örnek Program

   Bu örnek programda, kullanıcıdan bir doğal sayı girilmesi isteniyor ve 1 den başlayarak girilen doğal sayıya kadar sayıların toplamı yapılıyor.

#include <iostream>
using namespace std;

int main()
{
    int n, toplam = 0;

    cout << "Pozitif sayi giriniz: ";
    cin >> n;

    for (int i = 1; i <= n; i++) {
        toplam += i;
    }

    cout << "Toplam = " << toplam;
    return 0;
}

Delete Operatörü Nedir?

    Dinamik olarak ayrılmış belleği ayırmanın programcının sorumluluğu olması nedeniyle programcılara C ++ dili ile delete operatörü sağlanır. 
   Sözdizimi:
// Release memory pointed by pointer-variable
delete pointer-variable;  
    İşaretçi değişkeni, new tarafından oluşturulan veri nesnesine işaret eden işaretçidir 
    Örnek:

delete p;
  delete q;
    İşaretçi değişkeni tarafından işaret edilen dinamik olarak ayrılmış diziyi boşaltmak için aşağıdaki delete biçimini kullanın :

// Release block of memory 
// pointed by pointer-variable
delete[] pointer-variable;  

Example:
   // It will free the entire array
   // pointed by p.
   delete[] p;

Operatörlerin Aşırı Yüklenmesi (Overloading)

    Operatörlere bilinen özellikleri dışında başka özellikler kazandırmak mümkündür. C++ da bu işleme operatörlerin aşırı yüklenmesi adı v...