Rabu, 20 Mei 2009

Tutorial C++

Kelas

Sebuah kelas merupakan pengembangan konsep dari struktur data: tidak hanya data, tapi juga dapat menangani data dan fungsi.

Sebuah objek merupakan perwakilan dari sebuah kelas. Dalam perbandingan dengan variabel, sebuah kelas akan menjadi tipe data dan objeknya menjadi variabel.

Kelas dideklarasi menggunakan kata kunci class, dengan format berikut:

class class_name

{

access_specifier_1:

member1;

access_specifier_2:

member2;

….

} object_names;

dimana class_name merupakan identifier sah untuk kelas, object_names merupakan daftar nama opsional dari objek pada kelas ini. Isi deklarasi bisa mencakup anggota yang meliputi deklarasi data atau fungsi, dan “optionally access specifiers“.

Seluruhnya sangat mirip dengan deklarasi pada struktur data, kecuali bahwa kita bisa memasukkan fungsi dan anggota, tapi juga hal baru ini disebut access specifier. Access specifier merupakan satu dari tiga kata kunci berikut: private, public, atau protected. Specifiers ini mengatur hak akses dimana anggota dibutuhkan:

  • anggota private, dapat diakses hanya oleh anggota pada kelas yang sama dan friends mereka
  • anggota protected bisa diakses oelh anggota dari kelas yang sama dan friends mereka, namun juga dari anggota turunan kelas mereka
  • anggota public dapat diakses dari mana saja dimana objek terlihat.

Secara default, semua anggota kelas dideklarasi dengan kata kunci class memiliki akses private untuk setiap anggotanya. Jadi, setiap anggota yang dideklarasi sebelum specifier kelas lain memiliki akses private. Contohnya:

class CRectangle {
int x, y;
public:
void set_values (int,int);
int area (void);
} rect;

Deklarasi sebuah kelas(yakni tipe) CREctangle dan sebuah objek yang dinamakan rect.Kelas ini berisi empat anggota: dua anggota data bertipe int(anggota x dan y) dengan akses private(secara default) dan dua anggota fungsi dengan akses publik: set_value() dan area(), di mana sekarang baru disertakan deklarasi, belum definisinya.

Perhatikan perbedaan antara nama kelas dan nama objek: dalam contoh sebelumnya, Crectangle adalah nama kelas, sedangkan rect adalah nama objek dengan tipe Crectangle. Hal ini sama dengan hubungan int dan a pada deklarasi di bawah ini:

int a;

Dimana int merupakan nama tipe(kelas) dan a merupakan nama variabel(objek).
Setelah deklarasi sebelumnya yakni Crectangle dan rect, kita bisa mengacu dalam isi program untuk anggota publik dari objek rect seperti mereka fungsi dan variabel normal, dengan menambahkan nama objek diikuti dengan dot(.) dan nama anggota. Selayaknya yang kita lakulan pada struktur data sebelumnya. Contohnya:

rect.set_values(3,4);
myarea=rect.area();

Anggota rect yang tidak dapat diakses dari isi program kita diluar kelas adalah x dan y, karena mereka dalam akses private dan mereka hanya bisa diacu dari anggota lain pada kelas yang sama.

Ini merupakan contoh lengkap dari kelas CRectangle:

// classes example
#include
using namespace std;

class CRectangle {
int x, y;
public:
void set_values (int,int);
int area () {return (x*y);}
};

void CRectangle::set_values (int a, int b) {
x = a;
y = b;
}

int main () {
CRectangle rect;
rect.set_values (3,4);
cout << “area: ” << rect.area();
return 0;
}

Area: 12

Hal baru yang paling penting dalam koding adalah operator lingkup(::, titik dua) yang mencakup definisi set_values(). Ini digunakan untuk mendefinisi anggota kelas dari luar definisi kelas itu sendiri.

Anda dapat memperhatikan bahwa definisi dari fungsi anggota area() telah meliputi langsing definisi kelas CRectangle yang diberikan secara sederhana, dimana set_value() hanya memiliki prototype yang dideklarasi di dalam kelas,namun definisi ini berada diluarnya. Dalan deklarasi di luar, kita harus menggunakan operator scope(::) untuk menjelaskan bahwa kita mendefinisi sebuah fungsi yang merupakan anggota dari kelas Crectangle dan bukan fungsi global biasa.

Operator Scope(::) menjelaskan kelas dimana anggota tersebut dideklarasi, memperbolehkan lingkup properti yang sama seakan definisi fungsi disertakan dalan definisi kelas. Contohnya, dalam fungsi set_values() dari koding sebelumnya.. kita bisa menggunakan variabel x dan y, yang merupakan anggota privat kelas Crectangle, yang berarti mereka hanya dapat diakses oleh anggota lain dari kelas tersebut.

Perbedaan antara definisi fungsi anggota kelas meliputi kelas tersebut atau mencakup prototype dan kemudian definisinya, adalah dalan kasus pertama, fungsi akan secara otomatis dipertimbangkan dalam fungsi anggota inline oleh compiler, dan kasus keduam merupakan fungsi anggota normal(not-inline) , dimana dalam kenyataannya, tidak ada perbedaan dalam behavior.

Anggota x dan y memiliki hak akses private(ingat bahwa jika tidak ada yang dikatakan, semua anggota kelas didefinisi dengan hak akses private). Dengan deklarasi private, kita menolak mengakses mereka dari semua tempat diluar kelas. Ini membuat masalah, sebah kita telah mendefinisikan fungsi anggota untuk mengatur nilai anggota dalan objek: fungsi anggota set_values();. Untuk itu, sisanya dari program tidakmembutuhkan akses langsung untuk mereka. Mungkin dalam contoh singkat, ini sulit untuk melihat kegunaan melindungi dua variabel tersebut, namun dalan proyek lebih besar, akan sangat penting bahwa nilai tidak dapat dimodifikasi dalam cara yang tidak diharapkan( tidak diharapkan dari sudut pandang objek).

satu keuntungan besa dari kelas bahwa, dalam tipe yang lain, kita dapat mendefinisi beberapa objek padanya. Misalnya, dalan contoh sebelumnya, pada kelas Crectangle, ita dapat mendeklarasi object rectb sebagai tambahaan pada objek rect:

// example: one class, two objects
#include
using namespace std;

class CRectangle {
int x, y;
public:
void set_values (int,int);
int area () {return (x*y);}
};

void CRectangle::set_values (int a, int b) {
x = a;
y = b;
}

int main () {
CRectangle rect, rectb;
rect.set_values (3,4);
rectb.set_values (5,6);
cout << “rect area: ” << rect.area() << endl;
cout << “rectb area: ” << rectb.area() << endl;
return 0;
}

rect area: 12
rectb area: 30

Dalam kasus nyata, kelas(tipe objek) yakni Crectangle, memiliki dua objek instan : rect dan rectb. Setiapnya memiliki anggota dan fungsi variabel/

perhatikan bahwa memanggil rect.area() tidak memberikan hasil yang sama dengan memanggil rectb.area(). Ini dikarenakan setiap objek kelas Crectangle memiliki variabel x dan y tersendiri, dan hal yang sama terjadi pada anggota fungsi set_value() dan area() yang setiapnya menggunakan variabel objeknya untuk beroperasi.

Ini merupakan konsep dasar dari pemrograman berorientasi objek : data dan fungsi merupakan anggota objek. Kita tidak mengg lagi variabel global yang dilewatkan dari satu fungsi ke fungsi lain sebagai parameter, melainkan kita menangani objek yang memiliki data dan fungsi tersendiri sebagai anggotanya. Perhatikan bahawa kita tidak harus selalum memberikan parameter setiap kali memanggil rect.area atau rectb.area. Fungsi anggota tersebut secara langsung menggunakan anggota data dari objek rect dan rectb.

Tidak ada komentar:

Posting Komentar