Statik Üye İşlevi C++ (Örnekler)

Statik Fonksiyon Nedir? C++?

In C++ sınıflarda statik üye, nesnelerinden ziyade sınıfa ait olan bir sınıf üyesidir. Üyeliğin yalnızca bir kopyasına sahip olacaksınız. Bu, oluşturduğunuz nesnelerin sayısından bağımsız olarak geçerlidir.

Bir sınıf işlevi statik olarak tanımlandığında, tüm sınıf nesneleri statik bir sınıf üyesini paylaşır. Bu nedenle statik fonksiyona herhangi bir sınıf nesnesi oluşturulmadan erişilebilir ve bağımsız hale gelir. sınıf nesneleri. Statik bir veri üyesi C++ yalnızca sınıf dışındaki diğer statik işlevlere erişebilir.

Neden Statik İşlevler kullanılmalı?

aksine C++ global işlevlerde, statik işlevlere yalnızca bildirim dosyasından erişilebilir. Bir işleve erişimi kısıtlamanız gerekiyorsa onu statik yapın.

Aynı işlev adının başka bir dosyada yeniden kullanımını kısıtlamak için statik bir işlev kullanın.

Statik Fonksiyonların Tanımlanması C++

Sözdizimi:

static int myfunc(void)
{
    cout("Example of C++ static function ");
}

Yukarıdaki örnekte myfunc adında statik bir fonksiyon tanımlıyoruz. Tanımda static anahtar sözcüğünün kullanıldığına dikkat edin. Anahtar kelime, işlev adından önce gelir.

Statik Üye İşlevi C++

Bir işlev üyesi statik olarak bildirildiğinde sınıftaki diğer nesnelerden bağımsız hale gelir. Başka sınıf nesnesi olmasa bile statik bir üye işlevi çağırabilirsiniz.

Sınıf adlarına erişmek için sınıfın adını ve kapsam çözümleme operatörünü kullanmalısınız. (::). Statik bir işlev yalnızca diğer statik işlevlere, statik veri üyelerine ve sınıf dışındaki diğer işlevlere erişebilir. Statik üye işlevlerinin kapsamı sınıfın içindedir ve bu sınıf işaretçisine erişemezler.

Örnek 1

#include<iostream>
using namespace std;
class BoxClass {
public:
	static int count;
	BoxClass(double l = 2.0, double b = 2.0, double h = 2.0) {
		cout << "Class constructor called." << endl;
		length = l;
		breadth = b;
		height = h;
		count++;
	}
	double getVolume() {
		return length * breadth * height;
	}
	static int getCount() {
		return count;
	}
private:
	double length;     
	double breadth;    
	double height;     
};
int BoxClass::count = 0;
int main(void) {
	cout << "Inital value of count is : " << BoxClass::getCount() << endl;
	BoxClass Box1(3.2, 1.4, 1.8);    
	BoxClass Box2(7.5, 4.0, 4.0);   
	cout << "Final value of count is : " << BoxClass::getCount() << endl;
	return 0;
}

Çıktı:

Statik Üye İşlevi

İşte kodun ekran görüntüsü:

Statik Üye İşlevi

Kod Açıklaması:

  1. iostream başlık dosyasını dosyamıza dahil etmek C++ onu kullanacak program fonksiyonlar.
  2. Sınıflarını çağırmadan kullanmak için std ad alanını koda ekleyin.
  3. Adlı bir sınıf oluşturun BoxSınıf.
  4. Herkese açık olan bir sınıf üyesini işaretlemek için genel erişim değiştiricisini kullanın.
  5. Count adında statik bir sınıf üyesi bildirir.
  6. Üç adet double tipindeki değişkeni başlatmak için bir sınıf oluşturucusu kullanın.
  7. Konsola bir miktar metin yazdırın. Endl (bitiş çizgisi) işlevi fare imlecini bir sonraki satıra taşır.
  8. l'nin değerini değişken uzunluğa atayın.
  9. B'nin değerini değişken genişliğe sıfırlayın.
  10. H değerini değişken yüksekliğe sıfırlayın.
  11. Daha sonra her yeni nesne oluşturulduğunda count değişkeninin değerini 1 artırın.
  12. Yapıcı gövdesinin sonu.
  13. doublevolume() adında bir fonksiyon oluşturun.
  14. doubleVolume() fonksiyonunun ne döndüreceğini tanımlayın. Uzunluk, genişlik ve yükseklik değişkenlerinin çarpımını döndürmelidir.
  15. doubleVolume() fonksiyon gövdesinin sonu.
  16. getCount() adında statik bir işlev bildirin.
  17. getCount() işlevi count değişkeninin değerini döndürmelidir.
  18. getCount() işlevinin gövdesinin sonu.
  19. Bir sınıf üyesini genel olarak erişilebilir olarak işaretlemek için özel erişim değiştiricisini kullanın.
  20. Çift veri türünden length adında bir sınıf üyesi tanımlanıyor. Özel olarak erişilebilir olacak.
  21. Çift veri türünden width adlı başka bir sınıf üyesini bildirin. Özel olarak erişilebilir olacaktır.
  22. Çift veri türünden height adında bir sınıf üyesi tanımlanıyor. Özel olarak erişilebilir olacak.
  23. Vücudun sonu BoxSınıf sınıfı.
  24. Daha sonra statik bir üyeyi başlat BoxSınıf sınıfı.
  25. main() fonksiyonunun çağrılması. C++ program mantığı bu fonksiyonun gövdesine eklenmelidir.
  26. Yeni nesneler oluşturulmadan önce konsola mevcut nesne sayısını belirten bir miktar metin yazdırın.
  27. Adlı bir nesne bildirin Box1, sınıfın örneklerinden biri BoxSınıf. Genişlik, uzunluk ve yükseklik değerleri parantez içinde belirtilmelidir.
  28. Adlı bir nesne bildirin Box2, sınıfın bir örneğidir BoxSınıf. Genişlik, uzunluk ve yükseklik değerleri parantez içinde belirtilmiştir.
  29. Yeni nesnelerin oluşturulmasından sonra konsola mevcut nesne sayısını belirten bir miktar metin yazdırın.
  30. The C++ program Başarılı bir şekilde tamamlandıktan sonra değeri döndürmesi gerekir.
  31. main() fonksiyonunun gövdesinin sonu.

Statik İşlevlere Erişim

Statik bir işleve erişmek için bir sınıf nesnesi oluşturmanıza gerek yoktur. Bunun yerine sınıf adı ve kapsam çözümleme operatörünü kullanabilirsiniz. (::).

Sözdizimi:

className::funcName

Yukarıda className, statik fonksiyonun tanımlandığı sınıfın adıdır. funcName, statik işleve atanan addır.

Örnek 2

#include<iostream> 
using namespace std;
class MyClass {
public:
	static void msgFunc() {
		cout << "Welcome to Guru99!";
	}
};
int main() {
	MyClass::msgFunc();
}

Çıktı:

Statik İşlevlere Erişim

İşte kodun ekran görüntüsü:

Statik İşlevlere Erişim

Kod Açıklaması:

  1. Fonksiyonlarını kullanabilmek için iostream başlık dosyasını programımıza dahil ediyoruz.
  2. Sınıflarını çağırmadan kullanmak için kodunuza std ad alanını ekleyin.
  3. MyClass adlı bir sınıf oluşturun.
  4. Bir sınıf üyesini genel olarak erişilebilir olarak işaretlemek için genel erişim değiştiricisini kullanın.
  5. MsgFunc() adlı statik bir işlevin bildirilmesi. Statik anahtar sözcüğü işlevi statik hale getirir.
  6. Yukarıdaki işlev çağrıldığında/çağırıldığında konsolda yazdırılacak metni belirtin.
  7. msgFunc() işlevinin gövdesinin sonu.
  8. Sınıf gövdesini sonlandırın.
  9. main() fonksiyonunun çağrılması.
  10. msgFunc() adlı statik işlevi çağırın.
  11. main() fonksiyonunun gövdesinin sonu.

Statik Değişkenlere Erişim

Statik değişkenler sınıf nesnelerinden ziyade bir sınıfa aittir. Statik bir değişken genelse, sınıf adı ve kapsam çözümleme operatörü kullanılarak erişilebilir. Ancak statik bir üye özel ise bu mümkün değildir.

Normalde özel değişkenlere genel işlevler kullanılarak erişilir. Ancak bir sınıf örneği/nesnesi oluşturulmalıdır. Çözüm statik bir işlev kullanmaktır.

Örnek 3: Statik değişken C++ sınıf

#include<iostream> 
using namespace std;
class AClass {
private:
	static int myvar;
public:
	static int getVar() { 
		return myvar; 
		} 
};
int AClass::myvar = 23; 
int main() {
	cout <<"The value of myvar is: "<< AClass::getVar() << '\n';
}

Çıktı:

Statik Değişkenlere Erişim

İşte kodun ekran görüntüsü:

Statik Değişkenlere Erişim

Kod Açıklaması:

  1. iostream başlık dosyasını programımıza dahil ediyoruz.
  2. Sınıflarını çağırmadan kullanmak için bu programa std ad alanını ekleyin.
  3. AClass adında bir sınıf oluşturun.
  4. Myvar değişkenini özel olarak erişilebilir hale getirmek için özel erişim değiştiricisini kullanın.
  5. Myvar adında statik bir tamsayı değişkeni oluşturun.
  6. getVar() işlevini herkesin erişebileceği şekilde işaretleyen genel erişim değiştiricisini kullanın.
  7. getVar() adında statik bir işlev oluşturma.
  8. getVar() işlevi myvar değişkeninin değerini döndürebilmelidir.
  9. getVar() fonksiyonunun gövdesinin sonu.
  10. AClass sınıfının gövdesinin sonu.
  11. Myvar değişkenine 23 değerini atayın. Bunun için sınıf adı ve kapsam çözümleme operatörünü kullandık.
  12. main() fonksiyonunun çağrılması.
  13. MyVar değişkeninin değerini diğer metinle birlikte konsola yazdırın. Bu değişkenin değerine erişmek için sınıf adını, statik işlevi ve kapsam çözümleme operatörünü kullandık.
  14. main() işlev gövdesinin sonu.

Statik İşlevlerdeki bu İşaretçi

Bir nesneye statik bir işlev eklenmez. Bu nedenle statik işlevlerde bu işaretçi yoktur. Bir nesnenin işaretçisi genellikle o anda üzerinde çalıştığı nesneyi işaret eder. Statik işlevler nesnelerle çalışmadığından bu işaretçiye gerek yoktur.

Statik işlevlerin diğer statik üyelere doğrudan erişimi vardır. Ancak statik olmayan üyelerde durum böyle değildir. Bunun nedeni, statik olmayan üyelerin bir nesneye ait olması gerektiği, ancak statik işlevlerin çalışacak nesneleri olmamasıdır.

Örnek 4

Sınıf bildiriminin dışında statik bir işlev tanımlamak mümkündür. Bunu gösterelim:

#include<iostream> 
using namespace std;
class NumGenerator {
private:
	static int nextNum; 
public:
	static int getNextNum();
};
int NumGenerator::nextNum = 1;
int NumGenerator::getNextNum() {
	return nextNum++; 
}
int main() {
	for (int count = 0; count < 5; ++count)
		std::cout << "The next number is: " << NumGenerator::getNextNum() << '\n';
	return 0;
}

Çıktı:

Statik İşlevlerdeki bu İşaretçi

İşte kodunuzun ekran görüntüsü:

Statik İşlevlerdeki bu İşaretçi

Kod Açıklaması:

  1. İşlevlerini kullanmak için iostream başlık dosyasını kodumuza dahil ediyoruz.
  2. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
  3. Num adında bir sınıf oluşturunGenerator.
  4. Değişkeni işaretlemek için özel erişim değiştiriciyi kullanarak, özel olarak erişilebilir olarak oluşturmak üzereyiz.
  5. nextNum adında statik bir tamsayı değişkeni oluşturun.
  6. Oluşturmak üzere olduğumuz değişkeni herkese açık olarak işaretlemenize yardımcı olan genel erişim değiştiriciyi kullanmak.
  7. getNextNum() adlı statik bir işlevin bildirilmesi.
  8. Sınıf gövdesinin sonu.
  9. nextNum değişkenine 1 değerini atayın. Bunu sınıf adını, değişken adını ve kapsam çözümleme operatörünü kullanarak yaptık.
  10. getNextNum() statik fonksiyonunun sınıf dışında tanımlanması.
  11. Yukarıdaki işlev çağrıldığında/çağırıldığında gerçekleştirilecek eylemi belirtin. NextNum değişkeninin değerini 1 artıracaktır.
  12. getNextNum() fonksiyonunun tanımının sonu.
  13. main() fonksiyonunun çağrılması. C++ Bu fonksiyonun gövdesine program mantığı eklenmelidir.
  14. Kullanmak döngü için count adında bir değişken oluşturmak için. Bu değişkenin değeri 0'dan 4'e kadar artmalıdır. Her yinelemeden sonra değişkenin değeri 1 artacaktır.
  15. Her yinelemede nextNum değişkeninin değerinin konsoldaki diğer metinlerle birlikte yazdırılması. Değere getNextNum() işlevi kullanılarak erişilir.
  16. Bu C++ program başarılı bir şekilde tamamlandıktan sonra değeri döndürmelidir.
  17. Main() fonksiyonunun sonu.

ÖZET

  • C++ Statik üyeler, nesnelerinden ziyade sınıfa ait olan sınıf üyeleridir.
  • Oluşturduğunuz nesnelerin sayısına bakılmaksızın, statik bir üyenin yalnızca bir kopyasına sahip olursunuz.
  • Tüm sınıf nesneleri, her statik sınıf üyesini paylaşır.
  • Bir sınıf fonksiyonu statik olarak tanımlandıktan sonra sınıf nesnelerinden bağımsız hale gelir.
  • Herhangi bir sınıf nesnesi oluşturmasanız bile statik bir işleve erişilebilir.
  • Ancak statik işlevlerde sınıf nesnelerine işaret eden bu nesne yoktur.