Fungsi Anggota Statis di C++ (Contoh)

⚡ Ringkasan Cerdas

Fungsi anggota statis dalam C++ Karena termasuk dalam kelas dan bukan objek apa pun, maka metode ini hanya beroperasi pada anggota data statis, tidak memerlukan instance untuk dipanggil, dan tidak dapat mengakses anggota non-statis atau pointer `this`.

  • 📌 Definisi: Anggota statis merupakan milik kelas itu sendiri, sehingga hanya ada satu salinan bersama terlepas dari berapa banyak objek yang dibuat.
  • 🔁 Status Bersama: Setiap objek mengakses anggota data statis yang sama, sehingga ideal untuk penghitung di seluruh kelas atau konfigurasi bersama.
  • 🚪 Tidak Perlu Objek: Fungsi anggota statis dipanggil menggunakan nama kelas dan operator resolusi cakupan, tanpa membuat instance objek apa pun.
  • 🚫 Batas Akses: Fungsi statis tidak dapat menggunakan pointer `this` dan hanya dapat mengakses anggota statis, bukan data spesifik instance.
  • 🧩 Pola Sintaksis: Deklarasikan dengan kata kunci static di dalam kelas dan definisikan di luar kelas menggunakan ClassName::functionName.

Fungsi Anggota Statis di C++

Apa yang dimaksud dengan Fungsi Statis C++?

In C++ kelas, anggota statis adalah anggota kelas yang termasuk dalam kelas tersebut, bukan objeknya. Anda hanya akan memiliki satu salinan keanggotaan. Hal ini terjadi terlepas dari jumlah objek yang Anda buat.

Ketika fungsi kelas didefinisikan sebagai statis, semua objek kelas berbagi anggota kelas statis. Oleh karena itu, fungsi statis dapat diakses tanpa membuat objek kelas apa pun dan menjadi independen objek kelas. Anggota data statis di C++ dapat mengakses fungsi statis lainnya, di luar kelas saja.

Mengapa menggunakan Fungsi Statis?

Berbeda C++ fungsi global, fungsi statis hanya dapat diakses dari file deklarasi. Jika ada kebutuhan untuk membatasi akses ke suatu fungsi, jadikan fungsi tersebut statis.

Gunakan fungsi statis untuk membatasi penggunaan kembali nama fungsi yang sama di file lain.

Setelah alasan keberadaan fungsi statis dipahami, langkah selanjutnya adalah melihat bagaimana fungsi tersebut didefinisikan di C++ kode.

Mendefinisikan Fungsi Statis di C++

sintaks:

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

Dalam contoh di atas, kita mendefinisikan fungsi statis bernama myfunc. Perhatikan penggunaan kata kunci statis dalam definisi. Kata kunci muncul sebelum nama fungsi.

Fungsi Anggota Statis di C++

Ketika anggota fungsi dideklarasikan statis, ia menjadi independen terhadap objek lain di kelas. Anda dapat memanggil fungsi anggota statis meskipun tidak ada objek kelas lain.

Untuk mengakses nama kelas, Anda harus menggunakan nama kelas dan operator resolusi cakupan (::). Fungsi statis hanya dapat mengakses fungsi statis lainnya, anggota data statis, dan fungsi lain di luar kelas. Ruang lingkup fungsi anggota statis terletak di dalam kelas, dan mereka tidak dapat mengakses penunjuk kelas ini.

Contoh 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;
}

Keluaran:

Fungsi Anggota Statis

Berikut ini tangkapan layar kodenya:

Fungsi Anggota Statis

Code Penjelasan:

  1. Termasuk file header iostream di file C++ program untuk menggunakannya fungsi.
  2. Sertakan namespace std dalam kode untuk menggunakan kelasnya tanpa memanggilnya.
  3. Buat kelas bernama BoxKelas.
  4. Gunakan pengubah akses publik untuk menandai anggota kelas yang dapat diakses publik.
  5. Deklarasikan anggota kelas statis bernama count.
  6. Gunakan konstruktor kelas untuk menginisialisasi tiga variabel bertipe ganda.
  7. Cetak beberapa teks di konsol. Fungsi endl (garis akhir) memindahkan kursor mouse ke baris berikutnya.
  8. Inisialisasi nilai l ke panjang variabel.
  9. Inisialisasi nilai b ke lebar variabel.
  10. Inisialisasi nilai h ke ketinggian variabel.
  11. Kemudian Tingkatkan nilai variabel count sebanyak 1 setiap kali objek baru dibuat.
  12. Akhir dari badan konstruktor.
  13. Buat fungsi bernama doublevolume().
  14. Tentukan apa yang akan dikembalikan oleh fungsi doubleVolume(). Fungsi ini akan mengembalikan perkalian variabel panjang, lebar, dan tinggi.
  15. Akhir dari badan fungsi doubleVolume()
  16. Deklarasikan fungsi statis bernama getCount().
  17. Fungsi getCount() harus mengembalikan nilai variabel count.
  18. Akhir dari isi fungsi getCount().
  19. Gunakan pengubah akses pribadi untuk menandai anggota kelas sebagai dapat diakses publik.
  20. Mendeklarasikan anggota kelas yang diberi nama length dari tipe data double. Kelas tersebut dapat diakses secara pribadi.
  21. Nyatakan anggota kelas lain bernama breadth dengan tipe data double. Kelas tersebut akan dapat diakses secara pribadi.
  22. Mendeklarasikan anggota kelas bernama height dengan tipe data double. Kelas tersebut dapat diakses secara pribadi.
  23. Ujung tubuh BoxKelas kelas.
  24. Kemudian Inisialisasi anggota statis dari BoxKelas kelas.
  25. Memanggil fungsi main(). Itu C++ logika program harus ditambahkan dalam isi fungsi itu.
  26. Cetak beberapa teks di konsol yang menyatakan jumlah objek saat ini sebelum objek baru dibuat.
  27. Mendeklarasikan objek bernama Box1, yang merupakan salah satu instance dari kelas BoxKelas. Nilai lebar, panjang, dan tinggi harus ditentukan dalam tanda kurung.
  28. Mendeklarasikan objek bernama Box2, yang merupakan turunan dari kelas BoxKelas. Nilai lebar, panjang, dan tinggi telah ditentukan dalam tanda kurung.
  29. Cetak beberapa teks di konsol yang menyatakan jumlah objek saat ini setelah pembuatan objek baru.
  30. The C++ program harus mengembalikan nilai setelah berhasil diselesaikan.
  31. Akhir dari isi fungsi main().

Mengakses Fungsi Statis

Anda tidak perlu membuat objek kelas untuk mengakses fungsi statis. Sebagai gantinya, Anda dapat menggunakan nama kelas dan operator resolusi cakupan. (::).

sintaks:

className::funcName

Di atas, className adalah nama kelas di mana fungsi statis telah didefinisikan. funcName adalah nama yang ditetapkan untuk fungsi statis.

Contoh 2

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

Keluaran:

Mengakses Fungsi Statis

Berikut ini tangkapan layar kodenya:

Mengakses Fungsi Statis

Code Penjelasan:

  1. Menyertakan file header iostream dalam program kami untuk menggunakan fungsinya.
  2. Sertakan namespace std dalam kode Anda untuk menggunakan kelasnya tanpa memanggilnya.
  3. Buat kelas bernama MyClass.
  4. Gunakan pengubah akses publik untuk menandai anggota kelas sebagai dapat diakses publik.
  5. Mendeklarasikan fungsi statis bernama msgFunc(). Kata kunci static membuat fungsi menjadi statis.
  6. Tentukan teks yang akan dicetak di konsol setelah fungsi di atas dipanggil/dipanggil.
  7. Akhir dari isi fungsi msgFunc().
  8. Akhiri badan kelas.
  9. Memanggil fungsi main().
  10. Panggil fungsi statis bernama msgFunc().
  11. Akhir dari isi fungsi main().

Mengakses Variabel Statis

Variabel statis merupakan bagian dari suatu kelas, bukan objek kelas. Jika variabel statis bersifat publik, variabel tersebut dapat diakses menggunakan nama kelas dan menggunakan operator resolusi cakupan. Namun, hal ini tidak mungkin dilakukan jika anggota statis bersifat privat.

Biasanya, variabel privat diakses menggunakan fungsi publik. Namun, instance/objek kelas harus dibuat. Solusinya adalah dengan menggunakan fungsi statis.

Contoh 3: Variabel statis dalam C++ kelas

#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';
}

Keluaran:

Mengakses Variabel Statis

Berikut ini tangkapan layar kodenya:

Mengakses Variabel Statis

Code Penjelasan:

  1. Menyertakan file header iostream dalam program kami.
  2. Sertakan namespace std dalam program ini untuk menggunakan kelasnya tanpa menelepon.
  3. Buat kelas bernama AClass.
  4. Gunakan pengubah akses pribadi untuk membuat variabel myvar dapat diakses secara pribadi.
  5. Buat variabel integer statis bernama myvar.
  6. Gunakan pengubah akses publik yang menandai fungsi getVar() sebagai dapat diakses publik.
  7. Membuat fungsi statis bernama getVar().
  8. Fungsi getVar() seharusnya dapat mengembalikan nilai variabel myvar.
  9. Akhir dari isi fungsi getVar().
  10. Akhir dari badan kelas AClass.
  11. Tetapkan variabel myvar nilai 23. Kami telah menggunakan operator resolusi nama kelas dan ruang lingkup untuk ini.
  12. Memanggil fungsi main().
  13. Cetak nilai variabel myVar pada konsol bersama teks lainnya. Kami telah menggunakan nama kelas, fungsi statis, dan operator resolusi cakupan untuk mengakses nilai variabel ini.
  14. Akhir dari isi fungsi main().

Salah satu keterbatasan utama menjelaskan mengapa fungsi statis berperilaku berbeda dari metode biasa, yaitu tidak adanya pointer `this`.

Pointer ini dalam Fungsi Statis

Fungsi statis tidak melekat pada suatu objek. Itu sebabnya fungsi statis tidak memiliki penunjuk ini. Pointer suatu objek biasanya menunjuk ke objek yang sedang dikerjakannya. Karena fungsi statis tidak bekerja dengan objek, penunjuk ini tidak diperlukan.

Fungsi statis memiliki akses langsung ke anggota statis lainnya. Namun, hal ini tidak terjadi pada anggota non-statis. Alasannya adalah anggota non-statis harus menjadi bagian dari suatu objek, tetapi fungsi statis tidak memiliki objek untuk dikerjakan.

Contoh 4

Dimungkinkan untuk mendefinisikan fungsi statis di luar deklarasi kelas. Mari kita tunjukkan ini:

#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;
}

Keluaran:

Pointer ini dalam Fungsi Statis

Berikut ini tangkapan layar kode Anda:

Pointer ini dalam Fungsi Statis

Code Penjelasan:

  1. Menyertakan file header iostream dalam kode kita untuk menggunakan fungsinya.
  2. Sertakan namespace std dalam kode kita untuk menggunakan kelasnya tanpa memanggilnya.
  3. Buat kelas bernama NumGenerator.
  4. Dengan menggunakan pengubah akses privat untuk menandai variabel, kita akan membuatnya sebagai variabel yang dapat diakses secara privat.
  5. Buat variabel integer statis bernama nextNum.
  6. Menggunakan pengubah akses publik yang membantu Anda menandai variabel yang akan kita buat sebagai dapat diakses publik.
  7. Mendeklarasikan fungsi statis bernama getNextNum().
  8. Akhir dari badan kelas.
  9. Tetapkan variabel nextNum nilai 1. Kami telah melakukan ini menggunakan nama kelas, nama variabel, dan operator resolusi cakupan.
  10. Mendefinisikan fungsi statis getNextNum() di luar kelas.
  11. Tentukan tindakan yang akan diambil ketika fungsi di atas dipanggil/dipanggil. Ini akan menambah nilai variabel nextNum sebesar 1.
  12. Akhir dari definisi fungsi getNextNum().
  13. Memanggil fungsi main(). Itu C++ logika program harus ditambahkan dalam isi fungsi ini.
  14. Menggunakan untuk loop untuk membuat variabel bernama count. Nilai variabel ini harus bertambah dari 0 menjadi 4. Setelah setiap iterasi, nilai variabel akan bertambah 1.
  15. Mencetak nilai variabel nextNum bersama teks lain di konsol pada setiap iterasi. Nilai diakses menggunakan fungsi getNextNum().
  16. Kredensial mikro C++ program harus mengembalikan nilai setelah berhasil diselesaikan.
  17. Akhir dari fungsi main().

Pertanyaan Umum Demo Slot

Fungsi anggota statis adalah milik kelas, bukan objek mana pun. Fungsi ini dapat dipanggil tanpa membuat instance dan hanya dapat mengakses anggota data statis dari kelas tersebut.

Variabel anggota statis menyimpan satu nilai bersama untuk semua objek, sedangkan fungsi anggota statis beroperasi pada variabel bersama tersebut tanpa memerlukan instance objek.

Fungsi statis tidak terikat pada objek apa pun, sehingga tidak ada pointer `this`. Fungsi statis bekerja pada tingkat kelas dan oleh karena itu tidak dapat mengakses anggota non-statis.

Panggil fungsi tersebut menggunakan nama kelas dan operator resolusi cakupan, misalnya ClassName::function(), tanpa membuat objek apa pun dari kelas tersebut.

Tidak. Fungsi anggota statis hanya dapat mengakses anggota data statis dan fungsi statis lainnya, karena tidak memiliki konteks objek untuk mengakses data instance.

Asisten AI seperti GitHub Copilot menyarankan tanda tangan metode statis, menghasilkan kode berulang, menandai penyalahgunaan penunjuk `this`, dan menjelaskan kapan fungsi tingkat kelas lebih sesuai dengan desain daripada metode instans.

Ya. Linter dan IDE berbasis AI mendeteksi akses ilegal ke anggota non-statis, definisi di luar kelas yang hilang, dan kesalahan inisialisasi untuk variabel statis sebelum kompilasi gagal.

Gunakan salah satunya untuk perilaku yang berlaku di seluruh kelas dan tidak bergantung pada status objek, seperti penghitung, metode pabrik, atau fungsi pembantu yang digunakan bersama oleh semua instance.

Ringkaslah postingan ini dengan: