Deklarasi dan Definisi pada C++

Deklarasi dan Definisi pada C++
Deklarasi dan definisi adalah langkah awal dalam setiap penulisan program tidak terkecuali dalam bahasa C++. Deklarasi dan definisi diperlukan untuk semua tipe data termasuk tipe data bentukan user (user-defined type).

Bentuk sederhana deklarasi class adalah sebagai berikut,

class C { }; atau

struct C { };

dalam bahasa C++ struct dan class mempunyai pengertian yang sama. Deklarasi class dengan struct mempunyai anggota dengan akses public kecuali jika dinyatakan lain.

struct C

{
int i;
void f();
}

class C
{
public:
int i;
void f();
}
Kedua deklarasi tersebut mempunyai arti yang sama.

Hal ini adalah pilihan desain yang diambil oleh desainer C++ (Bjarne Stroustrup) untuk menggunakan C sebagai basis C++ ketimbang membuat bahasa yang sama sekali baru. Tentunya ada konsekuensi atas pilihan desain ini, salah satu contoh adalah kompatibilitas terhadap bahasa C.

Dalam bahasa C deklarasi,

struct C { … };

menyatakan C sebagai nama tag. Nama tag berbeda dengan nama tipe, sehingga C (nama tag) tidak dapat dipergunakan dalam deklarasi yang membutuhkan C sebagai suatu tipe obyek. Kedua contoh deklarasi berikut ini tidak valid dalam bahasa C,

C c; /* error, C adalah nama tag */

C *pc; /* error, C adalah nama tag */

Dalam bahasa C, kedua deklarasi tersebut harus ditulis sebagai berikut,

struct C c;

struct C *pc;

atau menggunakan typedef sebagai berikut,

struct C { … };

typedef struct C C;

C c;

C *pc;

C++ memperlakukan nama class, C sebagai nama tag sekaligus nama tipe dan dapat dipergunakan dalam deklarasi. Kata class tetap dapat dipergunakan dalam deklarasi, seperti contoh berikut ini,

class C c;

Dengan demikian C++ tidak membedakan nama tag dengan nama class, paling tidak dari sudut pandang pemrogram (programmer), dan tetap menerima deklarasi structure seperti dalam bahasa C. Kompatibilitas C++ terhadap tidak sebatas perbedaan nama tag dan nama tipe, karena standar C++ masih perlu mendefinisikan tipe POD (Plain Old Data). POD type mempunyai banyak persamaan dengan structure dalam C. Standar C++ mendefinisikan POD type sebagai obyek suatu class yang tidak mempunyai user-defined constructor, anggota protected maupun private, tidak punya base class, dan tidak memiliki fungsi virtual.

Sebuah class dapat memberikan ijin untuk class lain mengakses bagian protected maupun private class tersebut melalui hubungan friendship (dinyatakan dengan keyword friend). Sebuah class mempunyai beberapa fungsi khusus, yaitu constructor, copy constructor, destructor dan copy assignment operator.

Dalam desain suatu aplikasi terdiri atas banyak class, dan masing-masing class tidak berdiri sendiri melainkan saling bergantung atau berhubungan satu sama lain. Salah satu contoh hubungan tersebut adalah hubungan antara satu class dengan satu atau lebih base class atau parent class. Jika class C mempunyai base class B, dikenal dengan inheritance, maka deklarasi class menjadi,

class C : public B {}; atau

class C : protected B {}; atau

class C : private B {};

Akses terhadap anggota base class B dapat bersifat public, protected, maupun private, atau disebut dengan istilah public, protected atau private inheritance. Class C disebut dengan istilah derived class. Jika tidak dinyatakan bentuk akses secara eksplisit, seperti dalam deklarasi berikut:

class C : B

maka interpretasinya adalah private inheritance (default), tetapi jika menggunakan struct maka tetap merupakan public inheritance.jika desainer class C tersebut menginginkan hubungan multiple inheritance (MI) terhadap class B dan A, maka deklarasi class C menjadi,

class C : public B, public A { };

Sebuah class, seperti halnya class C mempunyai anggota berupa data maupun fungsi (member function). Isi class tersebut berada diantara tanda kurung { } dan dipilah-pilah sesuai dengan batasan akses yang ditentukan perancang (desainer) class tersebut.

class C : public B
{
public:
(explicit) C()(:member-initializer);
C(const C& );
C& operator=(const C&);
(virtual)~C();
statement lain
(protected: statement)
(private: statement)
};
Secara ringkas batasan akses (access specifiers) mempunyai arti seperti ditunjukkan pada table berikut ini,

About these ads

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s