24 Şubat 2018 Cumartesi

VİRTUAL (Sanal Fonksiyon) NEDİR?

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 kare 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 üçgen ise kare’den miras alsın. Üçgen içinde aynı fonksiyonları kullanabiliriz değil mi ? Bunu yapabilmemiz için kare sınıfımızdaki fonksiyonlarımızı virtual anahtar kelimesiyle deklare etmemiz gerekir yani prototiplerini virtual ön eki ile yazarız. Lafı çok uzatmadan örnek kodumuz ile olayı biraz somutlaştırayım.
class dortgen
{
    public:
    virtual int alan(int taban, int yukseklik){
       return taban*yukseklik;
    }
    int cevre(int taban, int yukseklik){
       return 2*(taban+yukseklik);
    }
};
class ucgen : public dortgen
{
    public:
    int alan(int taban, int yukseklik){
       return (taban*yukseklik)/2;
    }
};
Yukarıdaki kodu ile anlatıldığı gibi dortgen sınıfımızın virtual fonksiyonu olan alan ucgen sınıfımızda da aynı isim ile farklı işlevi gerçekleştirecek şekilde tanımlanabilir.
Aşağıdaki örnek kodumuzu inceleyelim.
int main() { dortgen *ptr; // ptr temel sınıfa ait bir pointer ucgen nesne1; //nesne1'de türemiş sınıfa ait bir nesne
ptr = &nesne1; // Temel sınıfa ait bir pointera türemiş sınıfın adresini atayabiliriz
    ptr->alan();   // Ekranda hangi şeklin alanı hesaplandı ?
return 0; }
Yukarıdaki kodu uygun şekilde ekleyip çalıştırdığımızda sınıflarımızdan hangisi için alan hesaplaması yaptı ? Program içinde temel sınıfımız olan dortgen'den oluşturduğumuz bir pointer tipli değişkene türetilmiş sınıfımızın adresini verdik. Sonra bu değişken ile alan() fonksiyonumuza ulaştık. Pointerımız programın o kısmında ucgeni gösterdiği için ucgen alanı hesaplanacaktır. Bu örnek genişleterek farklı kullanım alanları oluşturulabilir.
Şimdilik bu konuda söylenecekler bu kadar bir sonraki başlığımız olan Saf Sanal Fonksiyonlara değinerek yazımı tamamlıyorum.
Saf sanal fonksiyonlar kullanım olarak aynı şekildedir. Fakat temel sınıfımız içerisinde sadece virtual fonksiyonlarımız vardır. Bu sınıfa soyut sınıf denir.Soyut sınıfımızdan bir nesne türetmemiz mümkün değildir. Aynı zamanda soyut sınıftan miras alan tüm sınıflar virtual tanımlanmış olan fonksiyonlara sahip olmalıdır. Bu söylediklerim birer kuraldır ve eksikliğinde derleyici koşma hatasına sebep olurlar.

17 Şubat 2018 Cumartesi

C++ da ## OPERATORU

Bazen "birleştirme" operatörü olarak adlandırılan çift ​​sayı işareti veya "simge yapıştırma" operatörü ( ## ), nesne benzeri ve işlev benzeri makrolarda kullanılır. Ayrı belirteçlerin tek bir işaretle birleştirilmesine izin verir ve bu nedenle makro tanımında ilk veya son işaret olamaz.

Polymorphism (çok biçimlilik)

Polimorfizm kelimesi birçok forma sahip olmak demektir. Genellikle polimorfizm, bir sınıf hiyerarşisi olduğunda ve devralma ile ilişkili olduğunda oluşur.
C ++ polimorfizmi, üye işlev çağrısının, işlevi çağıran nesne türüne bağlı olarak farklı bir işlevin yürütülmesine neden olacağı anlamına gelir.

Inheritance (miras alma)

Nesne yönelimli programlamanın en önemli kavramlarından biri miras konusudur. Miras, başka bir sınıf açısından bir sınıf tanımlamamızı sağlar; bu da bir uygulamanın oluşturulmasını ve bakımını kolaylaştırır. Bu aynı zamanda kod işlevselliğini ve hızlı uygulama süresini yeniden kullanma fırsatı sağlar.
Bir sınıf oluştururken, tamamen yeni veri üyeleri ve üye işlevler yazmak yerine programcı, yeni sınıfın varolan bir sınıfın üyelerini devralması gerektiğini belirtebilir. Bu mevcut sınıfa taban sınıfı denir ve yeni sınıfa türetilmiş sınıfa denir .

Kapsülleme (Encapsulation)


Nesne yönelimli programlamanın ilk prensibi kapsülleme (encapsulation) olarak adlandırılır. Bu özellik, dilin nesne kullanıcısından gereksiz uygulama ayrıntılarını saklar. Oluşturulan bir sınıf (class) içerisinde kullanıcının işlemlerini daha kolay gerçekleştirebilmesi için bazı işlemler birleştirilerek tek bir işlem gibi gösterilir. Bu birleştirme işlemine kapsülleme denir.

Class Definition

Erişim belirteçleri (access modifier) sayesinde kapsülleme çok daha kolay yapılmaktadır. Erişim belirteçleri, oluşturulan sınıf veya sınıf içindeki elemanların erişim seviyelerini belirlemek için kullanılan anahtar kelimeler grubuna verilen isimdir. Metotlar ve değişkenler bir anahtar sözcük ile önceden bellirlenen sınırlar dahilinde kullanılabilir. Bu anahtar kelimeler şu şekilde sıralanabilir.
  • public: Sistemdeki bütün sınıfların erişebilmesini sağlar. Yalnızca aynı proje içinden değil, diğer projelerden de erişim sağlanabilir.
  • private: Bir "özellik (property)"in veya "metod"un sadece tanımlandığı sınıftan erişilebilmesini sağlar. Oluşturulan sınıf veya yapıların "public" olması açık bir şekilde belirtilmez ise, derleyici tarafından "private" olarak belirlenir.
  • internal: Aynı derleyici (assembly) içinde bulunan tüm sınıflardan erişim sağlanır. 
  • protected: Sadece tanımlandığı sınıfın içinde ve o sınıftan türetilmiş diğer sınıfların içinde erişilebilir.
Class Definition
             - class Name
             - {
             - public :
                   >> constructor(s)
                   >> destructor
                   >>  function members
                   >> data members
              - protected :
                   >> function members
                   >> data members
              - private :
                   >> function members
                   >> data members
               - } 

10 Şubat 2018 Cumartesi

C++ da # KULLANIMI

C++ programları kendi derleyicisi ile de ilişki halinde olacaktır.
Bu ilişki C++ önişlemcileri tarafından sağlanacaktır.
Önişlemcler çeşitli emirlerden oluşabilir.
Bu emirler C++ derleyicisinin kaynak kodunu denetlemekte kullanılır.
Önişlemci emirleri C++ programı içinde (#) işareti ile başlar.
C++ in en çok kullanılan önişlemci emirleri #include ve #define ile tanımlanmaktadır.
önişlemci emirleri (;) işareti ile sonlandırılamaz!

OVERLOADİNG

C/C++ Operatorlerin Aşırı Yüklenmesi (Operator Overloading) C++’ da +,-,*,!,++ gibi operatörler fonksiyonlar yazılarak bu operatörlere ...