C++ Ile Nesne Yönelimli Programlama(C++ Sınıflarına Sabit(Static) Üyeler)
--
Bu yazılar https://www.tutorialspoint.com/cplusplus/ adresindeki yazı dizilerinin çevirileridir.
“static” anahtar kelimesini kullanarak bir sınıf tanımlayabiliriz. Bir sınıfın bir üyesinin static olması sınıfın kaç adet nesnesinin oluşturulduğunun önemi olmadan static üyenin yalnızca bir kopyası olduğu anlamına gelir.
Static bir üye sınıfın tüm nesneleri tarafından paylaşılır. Başka bir tanımlama başlatması yoksa, ilk nesne oluşturulduğunda tüm static veriler sıfır olarak başlatılır(initialize). Bunu sınıf tanımına koyamayız, ama takip eden örnekte olduğu gibi sınıfın dışında hangi sınıfa ait olduğunu belirlemek için kapsam çözümleme operatörü :: kullanılarak static değişkeni yeniden bildirilerek başlatılabilir.
Static veri üyeleri kavramını anlamak için takip eden örneği deneyelim -
#include <iostream>
using namespace std;
class Kutu {
public:
static int nesneSayisi;
// Yapıcı tanımı
Kutu(double u = 2.0, double g = 2.0, double y = 2.0) {
cout <<“Yapici cagrildi.” << endl;
uzunluk = u;
genislik = g;
yukseklik = y;
// Her nesne oluşturulduğunda artır
nesneSayisi++;
}
double Hacim() {
return uzunluk * genislik * yukseklik;
}
private:
double uzunluk; // Kutunun uzunlugu
double genislik; // Kutunun genisligi
double yukseklik; // Kutunun yuksekligi
};
// Kutu sınıfından static üye başlatılması
int Kutu::nesneSayisi = 0;
int main(void) {
Kutu Kutu1(3.3, 1.2, 1.5); // kutu1 tanımı
Kutu Kutu2(8.5, 6.0, 2.0); // kutu2 tanımı
// Toplam nesne sayısını yazdır.
cout << “Toplam nesneler: “ << Kutu::nesneSayisi << endl;
return 0;
}
Yukarıdaki kod derlenip çalıştırıldığında takip eden sonucu oluşturur -
Yapici cagrildi.
Yapici cagrildi.
Toplam nesneler: 2
Sabit(Static) Fonksiyon Üyeleri
Bir fonksiyon üyesini static olarak bildirerek, onu sınıfın herhangi bir özel nesnesinden bağımsız hale getirirsiniz.
Static üye fonksiyonu, sınıfın hiçbir nesnesi olmasa ve fonksiyonlara yalnızca sınıf adı ve kapsam çözümleme operatörü :: kullanılarak erişilse bile çağrılabilir.
Static üye fonksiyonu sadece static veri üyesine, diğer static üye fonksiyonlarına ve sınıfın dışından diğer fonksiyonlara erişebilir.
Static üye fonksiyonlarının bir sınıf kapsamı vardır ve sınıfın bu işaretçisine erişimleri yoktur. Sınıfın bazı nesnelerinin oluşturulup oluşturulmadığını anlamak için static bir üye fonksiyonu kullanabilirsiniz.
Static fonksiyon üyelerini takip eden örnekle anlayalım -
#include <iostream>
using namespace std;
class Kutu {
public:
static int nesneSayisi;
// Yapıcı tanımı
Kutu(double u = 2.0, double g = 2.0, double y = 2.0) {
cout <<”Constructor called.” << endl;
uzunluk = u;
genislik = g;
yukseklik = y;
// Her nesne oluşturulduğunda artır
nesneSayisi++;
}
double Hacim() {
return uzunluk * genislik * yukseklik;
}
static int sayacKac() {
return nesneSayisi;
}
private:
double uzunluk; // Kutunun uzunlugu
double genislik; // Kutunun genisligi
double yukseklik; // Kutunun yuksekligi
};
// Kutu sınıfından static üye başlatımı
int Kutu::nesneSayisi = 0;
int main(void) {
// Nesne oluşturmadan toplam nesne sayısını yazdır.
cout << “Ilk asama sayisi: “ << Kutu::sayacKac() << endl;
Kutu Kutu1(3.3, 1.2, 1.5); // kutu1 tanımı
Kutu Kutu2(8.5, 6.0, 2.0); // kutu2 tanımı
// Nesne oluşturduktan sonra toplam nesne sayısını yazdır.
cout << “Son asama sayisi: “ << Kutu::sayacKac() << endl;
return 0;
}
Kod derlenip çalıştırıldığında takip eden sonuç oluşur -
Ilk asama sayisi: 0
Yapici cagrildi.
Yapici cagrildi.
Son asama sayisi: 2
https://www.tutorialspoint.com/cplusplus/cpp_static_members.htm