Bagikan melalui


Gambaran umum anggota kelas

A class atau struct terdiri dari anggotanya. Pekerjaan yang dilakukan kelas dilakukan oleh fungsi anggotanya. Status yang dipertahankan disimpan dalam anggota datanya. Inisialisasi anggota dilakukan oleh konstruktor, dan pekerjaan pembersihan seperti membebaskan memori dan melepaskan sumber daya dilakukan oleh destruktor. Di C++11 dan yang lebih baru, anggota data dapat (dan biasanya harus) diinisialisasi pada titik deklarasi.

Jenis anggota kelas

Daftar lengkap kategori anggota adalah sebagai berikut:

Contoh deklarasi kelas

Contoh berikut menunjukkan deklarasi kelas sederhana:

// TestRun.h

class TestRun
{
    // Start member list.

    // The class interface accessible to all callers.
public:
    // Use compiler-generated default constructor:
    TestRun() = default;
    // Don't generate a copy constructor:
    TestRun(const TestRun&) = delete;
    TestRun(std::string name);
    void DoSomething();
    int Calculate(int a, double d);
    virtual ~TestRun();
    enum class State { Active, Suspended };

    // Accessible to this class and derived classes only.
protected:
    virtual void Initialize();
    virtual void Suspend();
    State GetState();

    // Accessible to this class only.
private:
    // Default brace-initialization of instance members:
    State _state{ State::Suspended };
    std::string _testName{ "" };
    int _index{ 0 };

    // Non-const static member:
    static int _instances;
    // End member list.
};

// Define and initialize static member.
int TestRun::_instances{ 0 };

Aksesibilitas anggota

Anggota kelas dideklarasikan dalam daftar anggota. Daftar anggota kelas dapat dibagi menjadi sejumlah privatebagian , protected dan public menggunakan kata kunci yang dikenal sebagai penentu akses. Titik dua : harus mengikuti penentu akses. Bagian-bagian ini tidak harus berdampingan; artinya, salah satu kata kunci ini mungkin muncul beberapa kali dalam daftar anggota. Kata kunci menunjuk akses semua anggota hingga penentu akses berikutnya atau kurung kurawal penutup. Untuk informasi selengkapnya, lihat Kontrol akses anggota (C++).

Anggota statis

Anggota data dapat dinyatakan sebagai statis, yang berarti semua objek kelas memiliki akses ke salinan yang sama. Fungsi anggota dapat dinyatakan sebagai statis, dalam hal ini hanya dapat mengakses anggota data statis kelas (dan tidak this memiliki pointer). Untuk informasi selengkapnya, lihat Anggota Data Statis.

Fungsi anggota khusus

Fungsi anggota khusus adalah fungsi yang disediakan pengkompilasi secara otomatis jika Anda tidak menentukannya dalam kode sumber Anda.

  • Konstruktor default

  • Salin konstruktor

  • (C++11) Memindahkan konstruktor

  • Menyalin operator penugasan

  • (C++11) Pindahkan operator penugasan

  • Destruktor

Untuk informasi selengkapnya, lihat Fungsi anggota khusus.

Inisialisasi anggota yang bijaksana

Di C++11 dan yang lebih baru, deklarator anggota non-statis dapat berisi penginisialisasi.

class CanInit
{
public:
    long num {7};       // OK in C++11
    int k = 9;          // OK in C++11
    static int i = 9; // Error: must be defined and initialized
                      // outside of class declaration.

    // initializes num to 7 and k to 9
    CanInit(){}

    // overwrites original initialized value of num:
    CanInit(int val) : num(val) {}
};
int main()
{
}

Jika anggota diberi nilai dalam konstruktor, nilai tersebut menimpa nilai yang ditetapkan saat deklarasi.

Hanya ada satu salinan bersama anggota data statis untuk semua objek dari jenis kelas tertentu. Anggota data statis harus ditentukan dan dapat diinisialisasi pada cakupan file. Untuk informasi selengkapnya tentang anggota data statis, lihat Anggota data statis. Contoh berikut menunjukkan cara menginisialisasi anggota data statis:

// class_members2.cpp
class CanInit2
{
public:
    CanInit2() {} // Initializes num to 7 when new objects of type
                 //  CanInit are created.
    long     num {7};
    static int i;
    static int j;
};

// At file scope:

// i is defined at file scope and initialized to 15.
// The initializer is evaluated in the scope of CanInit.
int CanInit2::i = 15;

// The right side of the initializer is in the scope
// of the object being initialized
int CanInit2::j = i;

Catatan

Nama kelas, CanInit2, harus didahului i untuk menentukan bahwa yang i didefinisikan adalah anggota kelas CanInit2.

Lihat juga

Kelas dan Struktur