# Class ## Class Class adalah pengembangan dari konsep struktur data: seperti struktur data, class dapat memiliki member-memvber data, tetapi mereka juga dapat memiliki fungsi-fungsi sebagai member. Sebuah object adalah instansiasi dari sebuah class. Dalam kaitannya dengan variabel, sebuah class adalah tipe dan sebuah object adalah variabel. Class didefinisikan dengan keyword `class` atau keyword `struct`, dengan syntax berikut: ```cpp class nama_class { access_specifier_1: member1; access_specifier_2: member2; ... } nama_object; ``` Dimana `nama_class` adalah identifier yang valid untuk nama class, `nama_object` adalah daftar nama dari object-object dari class ini. `nama_object` adalah opsional. Body dari deklarasi dapat berisi member-member, yang dapat berupa data atau deklarasi fungsi, dan atau secara opsional *access specifier*. Class mempunyai format yahng sama seperti *struktur data* polos, hanya saja mereka dapat menyertakan fungsi-fungsi dan mempunyai ... Specifier ini memodifikasi hak akses dari member-member yang mengikutinya: - member `private` dari sebuah class hanya dapat diakses oleh member-member dalam class yang sama (atau dari fungsi atau class *friend*). - member `protected` dapat diakses dari member-member lain dari class yang sama (atau dari fungsi atau class *friend*), dan juga member-member dari class-class turunan. - member `public` dapat diakses darimanapun dimana object tersebut terlihat. Secara default, semua member dari class dideklarasikan dengan keyword `class` mempunyai akses private untuk semua member-membernya. Maka, member-member yang dideklarasikan sebelaum access specifier lain mempunyai akses private secara otomatis. Sebagai contoh: ```cpp class PersegiPanjang { int lebar, panjang; public: void set_nilai(int, int); int luas(void); } persegi; ``` ## Friendship dan Inheritance Secara prinsip, member-member private dan protected dari sebuah class tidak dapat diakses dari luar class tempat mereka dideklarasikan. Namun, aturan ini tidak berlaku untuk "friends". **Friends** adalah fungsi-fungsi atau class-class yang dideklarasikan dengan keyword `friend`. Sebuah fungsi non-member dapat mengakses member-member private dan protected dari sebuah class jika fungsi tersebut dideklarasikan sebagai sebuah `friend` dari class tersebut. Ini dilakukan dengan menyertakan sebuah deklatasi dari fungsi eksternal ini dalam class, dan mendahuluinya denga keyword `friend`: ```cpp= // Fungsi friend #include <iostream> using namespace std; class PersegiPanjang { int lebar, panjang; public: PersegiPanjang() {} PersegiPanjang (int x, int y) : lebar(x), panjang(y) {} int luas() { return lebar * panjang; } friend PersegiPanjang duplicate (const PersegiPanjang&); }; PersegiPanjang duplicate (const PersegiPanjang& param) { PersegiPanjang clone; clone.lebar = param.lebar * 2; clone.panjang = param.panjang * 2; return clone; } int main() { PersegiPanjang foo; PersegiPanjang bar(2, 3); foo = duplicate(bar); cout << foo.luas() << '\n'; return 0; } ``` Fungsi `duplicate` adalah *friend* dari class `PersegiPanjang`. Maka, fungsi `duplicate` dapat mengakses member `panjang` dan member `lebar` dari object-object dari tipe `PersegiPanjang`. Perhatikan