Rabu, 13 April 2011

KETAHANAN PANGAN NASIONAL


Krisis perekonomian yang terjadi saat ini tidak hanya di Indonesia. Di seluruh belahan bumi, banyak negara yang sedang mengalami kesulitan untuk memenuhi kehidupan rakyatnya. Adanya krisis global saat ini juga semakin membuat krisis bertambah sulit. Banyak kalangan yang memperkirakan kalau krisis perekonomian yang semakin kompleks ini bisa mengarah kepada krisis pangan. Kelaparan akan menjadi ancaman yang akan menyusul kemiskinan massal yang terjadi saat ini. Sebelum krisis pangan terjadi, sejak jauh- jauh hari, sudah banyak pemikir maupun praktisi yang mati-matian menggodok kebijakan kebijakan maupun sekedar sumbangan pemikiran untuk mengantisipasinya. Semuanya itu berdiri di atas satu sikap, bernama “Ketahanan Pangan”. Di dalam hal ini perlu sekali pemerintah membuat kebijakan-kebijakan yang baik untuk mengatasi krisis pangan yang akan terjadi.
Berbicara tentang kebijakan pemerintah, sebenarnya ada banyak hal yang bisa dilakukan oleh pemerintah untuk mengantisipasi bahaya krisis pangan. Yang paling utama adalah dengan meningkatkan pemberdayaan masyarakat untuk semakin memantapkan ketahanan pangan di bumi Indonesia.

Latar Belakang Masalah
Di negara kita, kesulitan dalam penyeimbangan neraca pangan sudah dialami sebelum awal krisis moneter terjadi pada pertengahan tahun 1997. Bahkan,  pemenuhan kebutuhan beras yang pernah diatasi secara swasembada pada tahun 1986, sampai saat sekarang ini ternyata tidak dapat dipertahankan. Menurut data dari Badan Pusat Statistik tahun 1999[1] kita  telah mengimpor beras sebanyak 1.8 juta ton pada tahun 1995; 2.1 juta ton pada tahun 1996; 0.3 juta ton pada tahun 1997; 2.8 juta ton pada tahun 1998; 4.7 juta ton pada tahun 1999. Di awal tahun 2000 kita bahkan dibanjiri dengan beras impor yang diberitakan ilegal, sedangkan di awal tahun 2006 kita diramaikan dengan keputusan pemerintah untuk mengimpor beras, yang dianggap tidak berpihak kepada petani meskipun hal itu bukan merupakan issue baru dan disadari pula bahwa petani kita pun merupakan konsumen beras. Bahkan, pada tahun ini kita dirisaukan dengan impor benih padi yang konon tidak berjalan mulus pula sampai ke tangan petani, padahal hasilnya diharapkan dapat mendongkrak produksi beras.
Ketahanan pangan tidak hanya mencakup pengertian ketersediaan pangan yang cukup, tetapi juga kemampuan untuk mengakses (termasuk membeli) pangan dan tidak terjadinya ketergantungan pangan pada pihak manapun.  Dalam hal inilah, petani memiliki kedudukan strategis dalam ketahanan pangan : petani adalah produsen pangan dan petani adalah juga sekaligus kelompok konsumen terbesar yang sebagian masih miskin dan membutuhkan daya beli yang cukup untuk membeli pangan.  Petani harus memiliki kemampuan untuk memproduksi pangan sekaligus juga harus memiliki pendapatan yang cukup untuk memenuhi kebutuhan pangan mereka sendiri. Disinilah perlu sekali peranan pemerintah dalam melakukan pemberdayaan petani.
Kesejahteraan petani pangan yang relatif rendah dan menurun saat ini akan sangat menentukan prospek ketahanan pangan nasional.  Kesejahteraan tersebut ditentukan oleh berbagai faktor dan keterbatasan, diantaranya yang utama adalah :
a.   Sebagian petani miskin karena memang tidak memiliki faktor produktif apapun kecuali tenaga kerjanya (they are poor becouse they are poor) , dalam hal ini keterbatasan sumber daya manusia yang ada (rendahnya kualitas pendidikan yang dimiliki petani pada umumnya) menjadi masalah yang cukup rumit, disisi lain kemiskinan yang structural menjadikan akses petani terhadap pendidikan sangat minim.
b.   Luas lahan petani sempit dan mendapat tekanan untuk terus terkonversi. Pada umumnya petani di Indonesia rata-rata hanya memiliki tanah kurang dari 1/3 hektar, jika dilihat dari sisi produksi tentu saja dengan luas tanah semacam ini tidak dapat di gunakan untuk memenuhi kehidupan sehari-hari bagi petani.
c. Terbatasnya akses terhadap dukungan layanan pembiayaan , ketersediaan modal perlu mendapatkan perhatian lebih oleh pemerintah pada umumnya permasalahan yang paling mendasar yang dialami oleh petani adalah keterbatasan modal baik balam penyediaan pupuk atau benih.
d.   Tidak adanya atau terbatasnya akses terhadap informasi dan teknologi yang lebih baik . petani di indonesia kebanyakan masih mengolah tanah dengan cara tradisional hanya sebagaian kecil saja yang sudah menggunakan teknologi canggih.tentu saja dari hasil aproduksinya sangat terbatas dan tidak bisa maksimal.
e. Infrastruktur produksi (air, listrik, jalan, telekomunikasi) yang tidak memadai . pertanian di indonesia mayoritas masih berada di wilayah pedesaan sehingga akses untuk mendapatkan sarana dan prasarana penunjang seperti air, listrik , kondisi jalan yang bagus dan telekomunikasi sangat terbatas
f.   Struktur pasar yang tidak adil dan eksploitatif akibat posisi rebut-tawar (bargaining position) yang sangat lemah .
g.    Ketidak-mampuan, kelemahan, atau ketidak-tahuan petani sendiri.
Tanpa menyelesaian yang mendasar dan komprehensif dalam berbagai aspek diatas kesejahteraan petani akan terancam dan ketahanan pangan akan sangat sulit dicapai. Maka disinilah peranan pemberdayaan masyarakat oleh pemerintah harus dijadikan sebagai pernhatian utama demi terwujudnya ketahanan pangan karena ketahanan pangan dapat terwujud dengan baik jika pengelolaanya dikelola mulai dari tataran mikro (mulai dari rumah tangga), jika akses masyarakat dalam mendapatkan kebutuhan pangan sudah baik maka ketahanan pangan di tataran makro sudah pasti secara otomatis akan dapat terwujud.

Analisis Masalah
Pembangunan ketahanan pangan pada hakekatnya adalah pemberdayaan masyarakat, yang berarti meningkatkan kemandirian dan kapasitas masyarakat untuk berperan aktif dalam mewujudkan ketersediaan, distribusi dan konsumsi pangan dari waktu ke waktu.  Masyarakat yang terlibat dalam pembangunan ketahanan pangan meliputi produsen, pengusaha, konsumen, aparatur pemerintah, perguruan tinggi, dan lembaga swadaya masyarakat.
Mengingat luasnya substansi dan banyaknya pelaku yang terlibat dalam pengembangan sistem ketahanan pangan, maka kerja sama yang sinergis dan terarah antar institusi dan komponen masyarakat sangat diperlukan.  Pemantapan ketahanan pangan hanya dapat diwujudkan melalui suatu kerja sama yang kolektif dari seluruh pihak yang terkait (stakeholders), khususnya masyarakat produsen (petani), pengolah, pemasar dan konsumen pangan dan pemerintah.
Pengadaan pangan bagi bangsa Indonesia hingga saat ini memang masih mengkhawatirkan. Padahal, Undang-Undang Republik Indonesia Nomor 7 Tahun 1996 tentang Pangan  telah memberikan arahan bagaimana kita harus mencapai ketahanan pangan bagi bangsa Indonesia.
Undang-Undang Republik Indonesia Nomor 7 Tahun 1996 mengatakan,bahwa Ketahanan pangan diwujudkan bersama oleh masyarakat dan pemerintah dan dikembangkan mulai tingkat rumah tangga. Apabila setiap rumah tangga Indonesia sudah mencapai tahapan ketahanan pangan, maka secara otomatis ketahanan pangan masyarakat, daerah dan nasional akan tercapai. Dengan demikian, arah pengembangan ketahanan pangan berawal dari rumah tangga, masyarakat, daerah dan kemandirian nasional bukan mengikuti proses sebaliknya.
Karena fokusnya pada rumah tangga, maka yang menjadi kegiatan prioritas dalam pembangunan ketahanan pangan adalah pemberdayaan masyarakat agar mampu menolong dirinya sendiri dalam mewujudkan ketahanan pangan. Pemberdayaan masyarakat tersebut diupayakan melalui peningkatan kapasitas SDM agar dapat secara bersaing memasuki pasar tenaga kerja dan kesempatan berusaha yang dapat menciptakan dan meningkatkan pendapatan rumah tangga.
Proses pemberdayaan tersebut tidak lagi menganut pola serapan, tetapi didesentralisasikan sesuai potensi dan keragaman sumberdaya wilayah. Demikian pula kesempatan berusaha tidak harus selalu pada usahatani padi (karena dengan luas lahan sempit tidak mungkin dapat meningkatkan kesejahteraannya), tetapi juga pada usaha tani non padi perlu dikembangkan. Dalam kaitannya dengan itu, upaya peningkatan ketahanan pangan tidak perlu terfokus pada pengembangan pertanian (dalam arti primer), tetapi diarahkan pada sistem dan usaha agribisnis yang berdaya saing, berkelanjutan, berkerakyatan dan terdesentralisasi.
Dengan adanya peningkatan pendapatan, maka daya beli rumah tangga mengakses bahan pangan akan meningkat.  Kemampuan membeli tersebut akan memberikan keleluasaan bagi mereka untuk memilih (freedom to choose) pangan yang beragam untuk memenuhi kecukupan gizinya. Karena itu upaya pemantapan ketahanan pangan tidak dilakukan dengan menyediakan pangan murah, tetapi dengan meningkatkan daya beli.
Dalam konteks inilah maka membangun kemandirian pangan pada tingkat rumah tangga ditempuh dengan membangun kemampuan (daya beli) rumah tangga tersebut untuk memperoleh pangan (dari produksi sendiri ataupun dari pasar) yang cukup, bergizi, aman dan halal, untuk menjalani kehidupan yang sehat dan produktif. Dengan demikian menghasilkan sendiri kemampuan memperoleh peningkatan pendapatan (daya beli) secara berkelanjutan. Dalam kaitan ini, maka kebebasan mengatur perdagangan pangan di daerah tidak perlu dibatasi, tetapi didorong dan diarahkan agar memberi manfaat yang optimal bagi konsumen dan produsen pangan di daerah yang bersngkutan sehingga kemandirian pangan akan dapat diwujudkan.

Rekomendasi Kebijakan
Dapat kita lihat sampai sekarang ini program pemerintah dalam kaitanya dengan pembangunan ketahanan pangan masih belum bisa memenuhi kebutuhan masyarakat pada umumnya, pembangunan ketahanan pangan yang ada masih bersifat pada tataran makro saja pemenuhan pangan pada tingkatan unit masyarakat terkecil masih terkesan terabaikan. Untuk mengatasi hal itu semua ada Berbagai upaya pemberdayaan untuk peningkatan kemandirian masyarakat khususnya pemberdayaan petani dapat dilakukan melalui :
Pertama, pemberdayaan dalam pengembangan untuk meningkatkan produktivitas dan daya saing.  Hal ini dapat dilaksanakan melalui kerjasama dengan penyuluh dan peneliti.  Teknologi yang dikembangkan harus berdasarkan spesifik lokasi yang mempunyai keunggulan dalam kesesuaian dengan ekosistem setempat dan memanfaatkan input yang tersedia di lokasi serta memperhatikan keseimbangan lingkungan.

Pemberdayaan masyarakat melalui pengembangan teknologi ini dapat dilakukan dengan memanfaatkan hasil kegiatan penelitian yang telah dilakukan para peneliti.  Teknologi tersebut tentu yang benar-benar bisa dikerjakan petani di lapangan, sedangkan penguasaan teknologinya dapat dilakukan melalui penyuluhan dan penelitian.  Dengan cara tersebut diharapkan akan berkontribusi langsung terhadap peningkatan usahatani dan kesejahtraan petani.
Kedua, penyediaan fasilitas kepada masyarakat hendaknya tidak terbatas pebngadaan sarana produksi, tetapi dengan sarana pengembangan agribisnis lain yang diperlukan seperti informasi pasar, peningkatan akses terhadap pasar, permodalan serta pengembangan kerjasama kemitraan dengan lembaga usaha lain.
Dengan tersedianya berbagai fasilitas yang dibutuhkan petani tersebut diharapkan selain para petani dapat berusaha tani dengan baik juga ada kepastian pemasaran hasil dengan harga yang menguntungkan, sehingga selain ada peningkatan kesejahteraan petani juga timbul kegairahan dalam mengembangkan usahatani.
Ketiga, Revitalitasasi kelembagaan dan sistem ketahanan pangan masyarakat. Hal ini bisa dilakukan melalui pengembangan lumbung pangan. Pemanfaatan potensi bahan pangan lokal dan peningkatan spesifik berdasarkan budaya lokal sesuai dengan perkembangan selera masyarakat yang dinamis.
Revitalisasi kelembagaan dan sistem ketahanan pangan masyarakat yang sangat urgen dilakukan sekarang adalah pengembnagan lumbung pangan, agar mampu memberikan kontribusi yang lebih signifikan terhadap upaya mewujudkan ketahanan pangan. Untuk itu diperlukan upaya pembenahan lumbung pangan yangb tidak hanya dakam arti fisik lumbung, tetapi juga pengelolaannya agar mampu menjadi lembaga penggerak perekonomian di pedesaan.
Pemberdayaan petani untuk mencapai ketahanan pangan dan meningkatkan kesejahteraan petani seperti diuraikan diatas, hanya dapat dilakukan dengan mensinergikan semua unsur terkait dengan pembangunan pertanian. Untuk koordinasi antara instansi pemerintah dan masyarakat intensinya perlu ditingkatkan.
Di sisi lain berdasarkan pendekatan sistem pangan, strategi pencapaian ketahanan pangan  juga dapat ditempuh melalui berbagai kebijakan di setiap subsistemnya, di antaranya sebagai berikut:

Subsistem konsumsi pangan
Di subsistem konsumsi (masyarakat konsumen) pangan, kebijakan peningkatan pendapatan dan daya beli masyarakat ditempuh dengan strategi penciptaan lapang kerja baru dan, khususnya oleh pemerintahan yang sekarang,  pelaksanaan program subsidi langsung tunai (SLT) bagi rakyat yang miskin; kebijakan diversifikasi pangan dan perbaikan kebiasaan makan ditempuh melalui strategi pencarian komoditi pangan alternatif; kebijakan perbaikan/promosi kesehatan.ditempuh dengan strategi perbaikan gizi; kebijakan mutu pangan ditempuh melalui strategi penyelenggaraan sistem jaminan mutu pangan. Khusus mengenai strategi penciptaan lapangan kerja baru, kebijakan pemerintah dalam  peningkatan keterampilan masyarakat untuk masuk di pasar kerja ditempuh dengan strategi pembangunan diklat. Namun, kebijakan makro ekonomi perlu mendukung hal ini, misalnya berupa kemudahan akses permodalan yang terbuka bagi para usahawan baru terhadap dana kredit dari bank. Kenyataan di lapang menunjukkan bahwa kebijakan Bank Indonesia untuk mencapai hal ini tidak selalu bersesuaian dengan kebijakan bank-bank umum di aspek yang sama. Dalam konteks penyediaan lapangan kerja, pemerintah kita juga memberikan kesempatan kepada kalangan generasi mudanya untuk bekerja di luar negeri.

Subsistem produksi pangan
Di subsistem produksi pangan stratum on farm, kebijakan intensifikasi pertanian yang diutamakan untuk produksi padi masih perlu dipertahankan karena status padi sebagai komoditi yang berimplikasi politis, yakni melalui strategi teknologi,  ekonomi, rekayasa  sosial,   dan nilai tambah yang diterapkan dalam praktek produksi. Kebijakan ekstensifikasi pertanian ditempuh melalui strategi penetapan wilayah pengembangan dan pewilayahan pertanian. Dengan strategi ini dilakukan pembangunan lahan-lahan pertanian baru untuk produksi pangan, baik berupa  lahan kering maupun lahan basah (sawah) yang dikaitkan dengan kegiatan transmigrasi. Dalam subsektor hortikultura, ditempuh strategi pembangunan, pemantapan, dan pengembangan  sentra produksi buah-buahan unggulan yang dikaitkan dengan pembangunan kebun induknya. Kebijakan rehabilitasi pertanian ditempuh  sejalan dengan strategi  penetapan komoditi prioritas, yakni rehabilitasi jaringan irigasi sebagai bagian dari strategi peningkatan produksi padi; rehabilitasi kebun bibit sebagai bagian dari strategi pengembangan buah-buahan prospektif. Kebijakan diversifikasi pertanian dilaksanakan melalui strategi diversifikasi horizontal dengan rekayasa sistem pertanian terpadu yang melibatkan usaha tani tanaman, ternak, dan atau ikan secara komplementer dan sinergis, sesuai dengan kondisi agroklimat lahannya.
Dalam stratum off-farm, kebijakan di subsistem produksi ditempuh melalui strategi pengembangan industri pertanian (agroindustri), khususnya  teknologi pengolahan pangan yang dapat menghasilkan beragam produk yang dapat mendorong konsumen melaksanakan diversifikasi konsumsi pangan dan berdaya saing kuat di pasar global. Pengembangan industri pengolahan pangan tersebut juga akan menciptakan diversifikasi pertanian secara vertikal yang mampu memberikan nilai tambah bagi komoditi pertanian yang diusahakan.

Subsistem peredaran pangan
Di subsistem peredaran (pengadaan dan distribusi) pangan,  kebijakan pengelolaan cadangan pangan dan stabilisasi harga pangan dijalankan   khususnya untuk komoditi beras. Untuk komoditi ini, kebijakan pengelolaan cadangan pangan ditempuh dengan penerapan strategi pengendalian ekspor dan impor dan penetapan lama persediaan beras cadangan yang aman untuk ketahanan pangan. Kebijakan stabilisasi harga beras ditempuh, jika perlu, dengan strategi penetapan harga dasar gabah dan harga tertinggi dan intervensi pasar beras dengan mempertimbangkan harga beras di pasaran internasional. Kebijakan pengembangan pasar komoditi ditempuh dengan melaksanakan strategi penciptaan iklim usaha agribisnis yang kompetitif, dengan pengaturan tata niaganya yang tidak menghambat mekanisme pasar sempurna. Dalam konteks pencapaian mekanisme pasar sempurna, perlu pertimbangan yang memadai agar strategi untuk stabilisasi harga beras tidak mengganggu pengaturan tata niaganya tersebut.

Kesimpulan
Sistem pangan nasional harus dibangun menuju ketahanan pangan nasional yang berbasis pada penyediaan pangan di tingkat individu. Paradigma baru dalam pembangunan sistem pangan nasional ini  akan menjamin ketahanan pangan di tingkat rumah tangga, lokal, regional, dan nasional. Meskipun demikian, mengingat demikian kompleks permasalahan yang tercakup, ketahanan pangan di kelima jenjang itu hendaknya dibangun secara bersamaan.
Ketahanan pangan nasional bermakna pengadaan pangan nasional (yakni penyediaan pangan secara nasional), dan distribusi pangan nasional (yakni penyediaan pangan di setiap  individu).  Kedua makna ini menuntut adanya kebijakan pangan secara nasional yang dipegang wewenangnya oleh pemerintah pusat (yang berfungsi steering) dan kebijakan pangan secara regional, lokal, rumah tangga, dan individu yang dipegang wewenangnya oleh pemerintah daerah otonom (kabupaten/kota, yang berfungsi rowing).
Fungsi steering oleh pemerintah pusat berupa arah pembangunan ketahanan pangan sebagai komponen yang penting bagi kesejahteraan dan keutuhan bangsa Indonesia. Dalam konteks ini, kelak diperlukan adanya evaluasi, apakah lembaga atau lembaga-lembaga tinggi negara yang kini ada telah cukup berhasil dengan efisien memantapkan ketahanan pangan, sebagaimana yang diharapkan, misalnya, oleh salah satu peran sektor pertaniannya dalam rangka revitalisasi pertanian, perikanan, dan kehutanan.
Fungsi rowing oleh pemerintah daerah otonom berupa keberlanjutan koordinasi antarlembaga terkait yang mendukung ketercapaian ketahanan pangan bagi setiap individu bangsa Indonesia yang bertempat tinggal di daerah otonom tersebut. Dalam konteks ini, perlu dievaluasi pula, seberapa besar kebijakan pemerintah daerah dalam mendorong dan memfasilitasi sektor swasta untuk berperan dalam pembangunan ketahanan pangan bagi sesama bangsanya.

Selasa, 05 April 2011

Pemograman Berorientasi Objek

KELAS
Class adalah metode logical untuk organisasi data dan fungsi dalam struktur yang sama. Class
dideklarasikan menggunakan keyword class, yang secara fungsional sama dengan keyword
struct, tetapi dengan kemungkinan penyertaan fungsi sebagai anggota, formatnya sbb :
class class_name {
permission_label_1:
member1;
permission_label_2:
member2;
...
} object_name;

Dimana class_name adalah nama class(user defined type) dan field optional object_name
adalah satu atau beberapa identifier objek yang valid. Body dari deklarasi berisikan members,
yang dapat berupa data ataupun deklarasi fungsi, dan permission labels (optional), dapat
berupa satu dari tiga keyword berikut : private:, public: atau protected:. Digunakan untuk
menentukan batasan akses terhadap members yang ada    :
private , anggota class dapat diakses dari danggota lain pada kelas yang sama atau
dari class "friend".

protected , anggota dapat diakses dari anggota class yang sama atau class friend , dan
juga dari anggota class turunannya(derived).
public , anggota dapat diakses dari class manapun.
Default permission label    : private

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

Deklarasi class CRectangle dan object bernama rect. Class ini berisi empat anggota:
dua variable bertipe int (x and y) pada bagian private (karena private adalah default
permission) dan dua fungsi pada bagian public : set_values() dan area(), dimana hanya
dideklarasikan propotype_nya.
Perhatikan perbedaan antara nama classdan nama object. Pada contoh sebelumnya
CRectangle adalah nama class(contoh, user-defined type), dan rect adalah object dari tipe
CRectangle. Sama halnya dengan deklarasi berikut :
int a;
int adalah nama class (type) dan a adalah nama object(variable).
 Contoh:

// classes example
#include <iostream.h>
class CRectangle {
int x, y;
public:
void set_values (int,int);
int area (void) {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();
}

Output     :
area: 12

Hal baru dari contoh diatas adalah operator :: dari lingkup yang disertakan dalam
pendefinisian set_values(). Digunakan untuk mendeklarasikan anggota dari class diluar class
tersebut.
Scope operator (::) menspesifikasikan class dimana anggota yang dideklarasikan
berada, memberikan scope properties yang sama seperti jika dideklarasikan secara langsung
dalam class.

Contoh:

// class example
#include <iostream.h>
class CRectangle {
int x, y;
public:
void set_values (int,int);
int area (void) {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;
}

Output:
rect area: 12
rectb area: 30

Perhatikan pemanggilan rect.area() tidak memberikan hasil yang sama dengan pemanggilan
rectb.area(). Ini disebabkan karena objek dari class CRectangle mempunyai variable sendiri,
x dan y, dan fungsi set_value() dan area().

Constructor dan destructor
Objek biasanya memerlkan inisialisasi variable atau menentukan memori dinamik selama
proses untuk mencapai hasil akhie yang diharapkan dan menghindari pengembalian nilai yang
tidak diharapkan.
Untuk mengatasinya dapat digunakan fungsi spesial : constructor, yang dapat dideklarasikan
dengan pemberian nama fungsi dengan nama yang sama untuk class. Fungsi dari constructor
ini akan dipanggil secara otomatis ketika instance baru dari sebuah class dibuat. Contoh :

// classes example
#include <iostream.h>
class CRectangle {
int width, height;
public:
CRectangle (int,int);
int area (void) {return (width*height);}
};
CRectangle::CRectangle (int a, int b) {
width = a;
height = b;
}
int main () {
CRectangle rect (3,4);
CRectangle rectb (5,6);
cout << "rect area: " << rect.area() << endl;
cout << "rectb area: " << rectb.area() << endl;
}

Output     :
rect area: 12
rectb area: 30

Hasil dari contoh diatas sama seperti contoh sebelumnya. Dalam hal ini, hanya menggantikan
fungsi set_values, yang sudah tidak ada dengan class constructor. Perhatikan cara parameter
diberikan ke constructor pada saat instance class dibuat   :
CRectangle rect (3,4);
CRectangle rectb (5,6);
Destructor berfungsi kebalikannya. Secara otomatis akan dipanggil jika objek di keluarkan
dari memory, ataupun karena keberadaannya telah selesai (contoh : jika didefinisikan sebuah
objek local dalam function dan function tersebut selesai) atau karena merupakan objek yang
secara dinamis ditetapkan dan dikeluarkan dengan menggunakan operator delete.
Destuctor harus mempunyai nama yang sama dengan class, diberi awalan tile (~) dan tidak
mengembalikan nilai. Contoh :

// example on constructors and destructors
#include <iostream.h>
class CRectangle {
int *width, *height;
public:
CRectangle (int,int);
~CRectangle ();
int area (void) {return (*width * *height);}
};
CRectangle::CRectangle (int a, int b) {
width = new int;
height = new int;
*width = a;
*height = b;
}
CRectangle::~CRectangle () {
delete width;
delete height;
}
int main () {
CRectangle rect (3,4), rectb (5,6);
cout << "rect area: " << rect.area() << endl;
cout << "rectb area: " << rectb.area() << endl;
return 0;
}

Output:
rect area: 12
rectb area: 30

Overloading Constructors
Sama halnya seperti fungsi, constructor juga dapat mempunyai nama yang sama tetapi
mempunyai jumlah dan tipe yang berbeda pada parameternya. Pada saat pemanggilan
kompiler akan meng-eksekusi yang sesuai pada saat objek class di deklarasikan.
Pada kenyataannya, ketika dideklarasikan sebuah class dan tidak disebutkan constructornya,
maka kompiler secara otomatis akan mengasumsikan dua constructor overloaded ("default
constructor" dan "copy constructor"). Contoh     :
class CExample {
public:
int a,b,c;
void multiply (int n, int m) { a=n; b=m; c=a*b; };
};

Jika tanpa constructor, Kompiler secara otomatis mengasumsikan anggota-anggota fungsi
constructor berikut  :

>   Empty constructor
Merupakan constructor tanpa parameters didefinisikan sebagai nop (blok instruksi
kosong). Tidak melakukan apapun.
CExample::CExample () { };


 >   Copy constructor

Merupakan constructor dengan satu parameter dengan tipe yang sama yang ditetapkan
untuk setiap anggota variable class nonstatik objek yang disalin dari objek
sebelumnya.
CExample::CExample (const CExample& rv) {
a=rv.a; b=rv.b; c=rv.c;
}
Penting untuk mengetahui, bahwa kedua constructor default : empty construction dan copy constructor ada jika tidak ada constructor lain yang dideklarasikan. Jika terdapat constructor
dengan sejumlah parameter dideklarasikan, maka tidak satupun dari constructors default ini
ada.
Contoh     :
// overloading class constructors
#include <iostream.h>
class CRectangle {
int width, height;
public:
CRectangle ();
CRectangle (int,int);
int area (void) {return (width*height);}
};
CRectangle::CRectangle () {
width = 5;
height = 5;
}
CRectangle::CRectangle (int a, int b) {
width = a;
height = b;
}
int main () {
CRectangle rect (3,4);
CRectangle rectb;
cout << "rect area: " << rect.area() << endl;
cout << "rectb area: " << rectb.area() << endl;
}
Output     :
rect area: 12
rectb area: 25

Contoh diatas rectb dideklarasikan tanpa parameter, sehingga diinisialisasikan dengan
constructor tanpa parameters, yang mendeklarasikan width dan height dengan nilai 5.
 Perhatikan jika dideklarasikan objek baru dan tidak diberikan parameter maka tidak
diperlukan tanda kurung ():
CRectangle rectb; // right
CRectangle rectb(); // wrong!
Relationships between classes
Friend functions (friend keyword)
Terdapat tiga akses berbeda untuk anggota class : public, protected dan private. Untuk
anggota protected dan private, tidak dapat diakses dari luar fungsi dimana mereka
dideklarasikan. Namun, aturan ini dapat di lewati dengan menggunakan keyword friend dalam
class, sehingga fungsi eksternal dapat mengakses anggota protected dan private suatu class.
Untuk itu, harus dideklarasikan prototype dari fungsi eksternal yang akan mengakses, Contoh:
// friend functions
#include <iostream.h>
class CRectangle {
int width, height;
public:
void set_values (int, int);
int area (void) {return (width * height);}
friend CRectangle duplicate (CRectangle);
};
void CRectangle::set_values (int a, int b) {
width = a;
height = b;
}
CRectangle duplicate (CRectangle rectparam)
{
CRectangle rectres;
rectres.width = rectparam.width*2;
rectres.height = rectparam.height*2;
return (rectres);
}
int main () {
CRectangle rect, rectb;
rect.set_values (2,3);
rectb = duplicate (rect);
cout << rectb.area();
}
Output     :
24
Dari fungsi duplicate, yaitu friend dari CRectangle, dapat mengakses anggota width dan
height untuk objek yang berbeda dari tipe CRectangle. Perhatikan bahwa dalam deklarasi
duplicate() maupun main() tidak dipertimbangkan apakah duplicate merupakan anggota dari  class CRectangle.   Secara umum keguanaan fungsi friend  diluar methodology pemrograman, jadi jika memungkinkan sebaiknya menggunakan anggota dari clas yang sama.

Friend classes (friend)

Selain dapat mendefinisikan fungsi friend, dapat juga didefinisikan class sebagai friend dari
class lainnya, sehingga memungkinkan class kedua dapat mengakses anggota protected dan
private class pertama. Contoh     :

// friend class
#include <iostream.h>
class CSquare;
class CRectangle {
int width, height;
public:
int area (void)
{return (width * height);}
void convert (CSquare a);
};
class CSquare {
private:
int side;
public:
void set_side (int a)
{side=a;}
friend class CRectangle;
};
void CRectangle::convert (CSquare a) {
width = a.side;
height = a.side;
}
int main () {
CSquare sqr;
CRectangle rect;
sqr.set_side(4);
rect.convert(sqr);
cout << rect.area();
return 0;
}

Output     :
16

Pada contoh diatas, dideklarasikan CRectangle sebagai friend dari CSquare, sehingga
CRectangle dapat mengakses anggota protected dan private dari CSquare, lebih jelasnya CSquare::side, Mendefinisikan lebar dari kotak.
Juga terdapat empty prototype dari class CSquare diawal program. Merupakan hal yang
penting karena dalam deklarasi CRectangle mengacu kepada CSquare (sebagai parameter
dalam convert()). Pendefinisian CSquare disertakan nanti, jika tidak disertakan pada
deklarasi sebelumnya untuk CSquare, maka class ini tidak akan terlihat dalam pendefinisian
CRectangle.

Inheritance between classes
Inheritance memungkinkan kita untuk membuat objek dari objek sebelumnya, sehingga memungkinkan untuk menyertakan beberapa anggota objek sebelumnya ditambah dengan anggota objeknya sendiri. Contoh, membuat class untuk mengetahui apakah segi empat (CRectangle), atau (CTriangle). Masing-masing mempunyai hal yang sama yaitu, dasar dan tinggi. Dapat direpresentasikan dengan class CPolygon kemudian diturunkan menjadi CRectangle dan CTriangle.

Class CPolygon dapat berisi anggota yang dipakai untuk setiap polygon, dalam hal ini width
dan height, dan CRectangle dan CTriangle adalah class turunannya.
Class turunan akan menurunkan seluruh anggota yang dimiliki oleh class dasar(parent)nya.
Jadi jika class paret mempunyai anggota A dan diturunkan pada class lain dengan anggota
B,maka clas turunan ini akan memiliki A dan B.
Untuk menurunkan class, menggunakan operator : (colon) pada saat deklarasi, syntax   :
class derived_class_name: public base_class_name;
Dimana derived_class_name adalah nama dari derived class dan base_class_name adalah
nama dari class asal. public dapat digantikan dengan tipe akses lainnya : protected atau
private, Contoh     :

// derived classes
#include <iostream.h>
class CPolygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{ width=a; height=b;}
};
class CRectangle: public CPolygon {
public:
int area (void)
{ return (width * height); }
};
class CTriangle: public CPolygon {
public:
int area (void)
{ return (width * height / 2); }
};
int main () {
CRectangle rect;
CTriangle trgl;
rect.set_values (4,5);
trgl.set_values (4,5);
cout << rect.area() << endl;
cout << trgl.area() << endl;
return 0;
}

Output:
 20
 10

Class CRectangle dan CTriangle masing-masing mengandung anggota dari CPolygon,
yaitu : width, height dan set_values().
Rangkuman tipe akses dan anggota yang bisa mengaksesnya:
Dimana "not-members" merepresentasikan referensi dari luar class, seperti dari main(), dari
class lain atau dari fungsi lain baik global ataupun local.
Pada contoh diatas, anggota yang diturunkan kepada CRectangle dan CTriangle diikuti
dengan hak akses yang sama dengan class asalnya, CPolygon:

CPolygon::width
CRectangle::width
CPolygon::set_values()

// protected access
// protected access
// public access

CRectangle::set_values() // public access
Ini diakibatkan karena menurunkan class sebagai public :
class CRectangle: public CPolygon;


What is inherited from the base class?
Pada dasarnya setiap anggota dari class dasar diturunkan kepada class turunannya, kecuali :
Constructor and destructor
operator=() member
friends
Jika class dasar tidak mempunyai default constructor atau akan melakukan pemanggilan
terhadap constructor overloaded ketika objek turunan yang baru dibuat maka dapat dituliskan
dalam setiap definisi constructor dari class turunan :
derived_class_name (parameters) : base_class_name (parameters) {}
Contoh:
// constructors and derivated classes
#include <iostream.h>
class mother {
public:
mother ()
{ cout << "mother: no parameters\n"; }
mother (int a)
{ cout << "mother: int parameter\n"; }
};
class daughter : public mother {
public:
daughter (int a)
{ cout << "daughter: int parameter\n\n"; }
};
class son : public mother {
public:
son (int a) : mother (a)
{ cout << "son: int parameter\n\n"; }
};
int main () {
daughter cynthia (1);
son daniel(1);
return 0;
}

Output     :
mother: no parameters
daughter: int parameter

mother: int parameter
son: int parameter

Terlihat perbedaan mana yang merupakan constructor dari mother yang dipanggil ketika
objek daughter dibuat dan ketika objek son dibuat. Perbedaannya disebabkan dari deklarasi
untuk daughter dan son:

daughter (int a)// nothing specified: call default constructor

son (int a) : mother (a) // constructor specified: call this one

Multiple inheritance
Dalam C++ memungkinkan untuk menurunkan field atau method dari satu atau lebih class
dengan menggunakan operator koma dalam deklarasi class turunan. Contoh, akan dibuat
class untuk menampilkan dilayar (COutput) dan akan diturunkan ke class CRectangle and
CTriangle maka dapat dituliskan :
class CRectangle: public CPolygon, public COutput {
class CTriangle: public CPolygon, public COutput {


Contoh:
// multiple inheritance
#include <iostream.h>
class CPolygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{ width=a; height=b;}
};
class COutput {
public:
void output (int i); };
void COutput::output (int i) {
cout << i << endl; }
class CRectangle: public CPolygon, public COutput {
public:
int area (void)
{ return (width * height); }
};
class CTriangle: public CPolygon, public COutput {
public:
int area (void)
{ return (width * height / 2); }
};

int main () {
CRectangle rect;
CTriangle trgl;
rect.set_values (4,5);
trgl.set_values (4,5);
rect.output (rect.area());
trgl.output (trgl.area());
return 0;
}
Output     :
20
10