Menu
CoddyTech

Method dan variabel static

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 31 dari 104.

Kamu sudah mempelajari bahwa member static digunakan bersama oleh semua object. Sekarang, mari kita pelajari cara mendefinisikan dan menggunakan method static dengan benar bersama variabel static.

Variabel statis yang dideklarasikan di dalam class harus didefinisikan di luar class, biasanya di dalam file sumber. Ini karena anggota statis membutuhkan tepat satu lokasi penyimpanan yang digunakan bersama oleh semua object:

class Counter {
    static int count;    // Hanya deklarasi
    
public:
    Counter() { count++; }
    ~Counter() { count--; }
    
    static int getCount() {    // method statis
        return count;
    }
};

// Definisi harus berada di luar class
int Counter::count = 0;

static method dimiliki oleh class, bukan oleh object mana pun. Hal ini memiliki konsekuensi penting: static method tidak dapat mengakses member instance atau menggunakan pointer this, karena static method tidak dipanggil pada object tertentu.

class MathUtils {
    static double pi;
    
public:
    static double circleArea(double radius) {
        return pi * radius * radius;    // Dapat mengakses anggota statis
    }
};

double MathUtils::pi = 3.14159;

// Dipanggil tanpa object
double area = MathUtils::circleArea(5.0);

method static cocok untuk fungsi utilitas yang tidak memerlukan state object, method factory yang membuat object, atau untuk mengakses data statis. Karena tidak memerlukan instance object, kamu memanggilnya menggunakan nama class dan operator resolusi cakupan: ClassName::methodName().

challenge icon

Tantangan

Mudah

Mari kita buat sistem pembuat ID unik yang menunjukkan cara method dan variabel statis bekerja sama untuk menyediakan fungsi pada tingkat class tanpa memerlukan instance object.

Kamu akan membuat dua file untuk mengatur kodemu:

  • IDGenerator.h: Definisikan class IDGenerator yang membuat ID unik berurutan. Class-mu harus memiliki:
    • Member statis privat nextId yang melacak ID berikutnya yang akan ditetapkan (dimulai dari 1000)
    • Member statis privat prefix (string) yang menyimpan awalan yang dapat disesuaikan untuk semua ID
    • Method statis setPrefix(const std::string& p) yang mengubah awalan
    • Method statis getNextId() yang mengembalikan string gabungan awalan dan nomor ID saat ini, lalu menaikkan nextId untuk pemanggilan berikutnya
    • Method statis peekNextId() yang mengembalikan ID berikutnya tanpa menaikkan penghitung
    • Method statis getGeneratedCount() yang mengembalikan jumlah ID yang telah dibuat (petunjuk: hitung berdasarkan nilai awal dan nextId saat ini)
    • Method statis reset() yang mengatur ulang nextId ke 1000

    Ingat untuk mendefinisikan member statismu di luar class setelah definisi class. Inisialisasi prefix dengan "ID-".

  • main.cpp: Tunjukkan cara memanggil method statis menggunakan nama class tanpa membuat object. Baca awalan khusus dari input, lalu:
    • Cetak "Peek: <peeked_id>" menggunakan peekNextId()
    • Buat tiga ID menggunakan getNextId() dan cetak masing-masing sebagai "Generated: <id>"
    • Cetak "Count: <count>" untuk menunjukkan jumlah ID yang telah dibuat
    • Ubah awalan menggunakan nilai input dengan setPrefix()
    • Buat dua ID lagi dan cetak masing-masing sebagai "Generated: <id>"
    • Cetak lagi "Count: <count>"
    • Panggil reset()
    • Cetak "After reset - Peek: <peeked_id>"
    • Cetak "After reset - Count: <count>"

Perhatikan bahwa kamu tidak pernah membuat object IDGenerator: semua method dipanggil langsung pada class menggunakan IDGenerator::methodName(). Inilah karakteristik utama method statis: method tersebut dimiliki oleh class itu sendiri, bukan oleh instance tertentu.

Sertakan <string> dan <iostream> di file header-mu, dan jangan lupa header guard.

Coba sendiri

#include <iostream>
#include <string>
#include "IDGenerator.h"

using namespace std;

int main() {
    // Baca prefix khusus dari input
    string customPrefix;
    cin >> customPrefix;
    
    // TODO: Cetak "Peek: <peeked_id>" menggunakan peekNextId()
    
    // TODO: Buat tiga ID menggunakan getNextId() dan cetak masing-masing sebagai "Generated: <id>"
    
    // TODO: Cetak "Count: <count>" untuk menunjukkan jumlah ID yang telah dibuat
    
    // TODO: Ubah prefix menggunakan nilai input dengan setPrefix()
    
    // TODO: Buat dua ID lagi dan cetak masing-masing sebagai "Generated: <id>"
    
    // TODO: Cetak "Count: <count>" lagi
    
    // TODO: Panggil reset()
    
    // TODO: Cetak "After reset - Peek: <peeked_id>"
    
    // TODO: Cetak "After reset - Count: <count>"
    
    return 0;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler C++ online