C dilinde olduğu gibi statik değikenler aynı mantıkta C++’da çalışıyor ancak sadece class içerisinde kullanımında bir farklılık var.
<aside> 💡 Static değişkenler program başlarken tanımladığı için default atamalarını Constructorlar içerisinde atamayız. Bu yüzden main’in olduğu cpp dosyamızın başında bu şekilde tanımlıyoruz. Private değere ulaşamıyoruz nasıl böyle bir tanım olucak derseniz? İlk atama sırasında değişkenimiz private da olsa bu şekilde erişebiliyoruz ve ilk atamasını gerçekleştirebiliyoruz ancak daha sonrasında tekrar denerseniz hata alırsınız. Sadece ilk atamaya özel bir durum.
int kare::publicCount = 0;
int kare::privateCount = 0;
</aside>
Şimdi az çok anladığınızı düşünüyorum. Şimdi örnekler üzerinden anlatarak pekiştirelim.
#include <iostream>
using namespace std;
class kare {
private:
int x;
static int privateCount;
// şimdi bu private static değişkenimiz.
public:
static int publicCount;
// bu da public static değişkenimiz
kare();
kare(int x);
};
kare::kare(){
cout << "Default Constructor" << endl;
}
kare::kare(int x){
this->x = x;
cout << "Constructor" << endl;
}
//kare.hpp dosyamız.
//main.cpp dosyamız.
#include "kare.hpp"
int kare::publicCount = 0;
int kare::privateCount = 0;
kare::kare(){
this->privateCount++;
this->publicCount++;
cout << "Default Constructor" << endl;
}
kare::kare(int x){
this->privateCount++;
this->publicCount++;
this->x = x;
cout << "Constructor" << endl;
}
int kare::get_x(){
return privateCount;
}
int main(){
int value = 10;
kare a;
kare b(5);
kare c(value);
cout << "a Default Constructor X Değeri : " << kare::publicCount << endl;
cout << "b Default Constructor X Değeri : " << kare::get_x() << endl;
cout << "c Default Constructor X Değeri : " << c.get_x() << endl;
}
Program çıktısı :
Küçük ödev :