C++ References

C dilinde kullandığımız pointerlar konusu C++ dilinde yerini referanslara bırakıyor. Ama C++ içinde de pointerları kullanabiliyorsunuz. Referanslar programcıya daha kolay bir kullanım sunuyor. Kullanıdığımız referanslar sadece notasyonel bir hile, arka planda aslında pointerlar var. Referans makina ile ilgili bir kavram değil. Makinada yine herşey adresler. & bu bir declarator, adres operatörle karıştırmamak gerekiyor. Çünkü bu tanımda kullanılıyor. Referansların Pointerlardan tek farkı seviyesi yükseltilmiş. İlk değer vermeden referans oluşturmak sentaks hatası 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <iostream>int main() { int &kerem; // Declaration of reference variable 'kerem' requires an initializer return 0; } #include <iostream>int main() { int x = 10; int y = 30; int &r = x; // artık r heryerde x'in yerine geçiyor r = 45; std::cout << "x -> " << x << std::endl; // x -> 45 r = y; std::cout << "x -> " << x << std::endl; // x -> 30 return 0; } Aslında ben r dediğimde *ptr gibi bir yapı kullanıyorum ama bu artık derleyiciyi ilgilendiren kısım.

C++ Copy Constructor

Soru cevap olarak gidersek konuyu daha iyi anlayabileceğimizi ve anlatabileceğimi umuyorum. Türkçe olarak nasıl çevirebiliriz? Yoğun olarak Kopyalan Kurucu İşlev olarak çevirildiğini gördüm. Genelde forumlar ve bloglarda kısaltmasını görmeniz mümkün. Kısaltması CC. Öyle durumlar var ki, bir nesne hayata değerini başka bir nesneden alarak başlıyor. Böylesi durumlarda hayata gelen nesne için çağrılan constructor a COPY CONSTRUCTOR deniliyor. Aşağıdaki örneği inceleyelim: Bu örnekte C++03 ve C++11 kullanımlarına da örnek verelim.

C++ Destructor & RAII & inline & friend

Destructor türkçe terim olarak sonlandırıcı kullanmak istiyorum. Destructor nesnenin hayatı bitince çağırılan fonksiyondur. Amaç Nedir? Kullanılan kaynakların geri iade edilmesi. Her sınıf için olmasada, bir nesne hayata geldiğinde iş yapabilmek için kaynak edinirler. Bu kaynaklar bir bellek alanı olabilir, bir port kullanılıyor olabilir vs. Ama nesnenin hayatı bittiğinde kaynakların geri verilmesi gerekiyor. (kaynaklardan biri heap ama başka kaynaklarda var tabi) kaynak olarak RESOURCE terimini kullanıcaz. Her sınıfının bir destructor‘ının bulunması zorunlu (dilin kuralı) Eğer sınıf bir kaynak edinmiyor ise destructor olacak mı?

C++ Constructor

Construct -> inşa etmek, kurmak Constructor -> inşa eden, kurucu Constructor hakkında bilmemiz gereken bazı bilgiler: (Yazının devamında bunları inceleyeceğiz) Constructor nesneyi hayata hazırlar. Her sınıfın constructorı mutlaka var. Ben constructor yazmassam benim yerime derleyici yazıyor. Constructor sınıf ismi ile aynı olmalıdır. Constructor geri dönüş kavramı yoktur. (void değil karıştırılmamalı) Constructor NON-STATIC üye fonksiyonudur. Constructor const OLAMAZ. Constructor OVERLOAD edilebilir. Bir sınıf nesnesi için bir bellek alanı elde etmemiz onu kullanılabilir bir sınıf yapmıyor.

C++ Classes & Data Abstraction

C++ dilinin en güçlü olduğu alanlardan bir tanesi data abstraction. Nesne yönelimli programlama data abstraction demek değil. Data abstraction anlamı veri soyutlama. Problem domaininde ki bir veriyi yazılımsal olarak nasıl temsil edeceğim demek. Hikaye şöyle, user defined türlerimiz olmasa elimizde sadece primitive türler var. Bu türlerle modellenebilecek veriler var. Ama problem domaininde bizi ilgilendirecek verilerin çoğu daha komplex. a + bi gibi bir sayı gibi yada bir üniversitede okuyan bir öğrencinin bilgileri.

C & C++ Dinamik Bellek Yönetimi & Extern C Bildirimi

Bu konuda fazla derine inmeden c dilinden c++ diline geçerken dinamik bellek yönetiminde bizi bekleyen bazı değişikliklerden bahsetmek istiyorum. Aynı zaman da extern c bildirimi ve interface tasarımı ile ilgili birkaç noktaya değinmek istiyorum. C dilinde stdlib kütüphanesinde ki fonksiyonları kullanıyorduk.. (malloc, alloc vs.) C++ dilinde bunlara gerek kalmayacak. Yeni operatörlerimiz var ismi new olan operatörler ve ismi delete olan operatörler. new operatörler nesneyi HAYATA GETİRİR. delete dinamik nesnelerin HAYATINI SONLANDIRIR.