Struktur Dan Class

Post on 21-Dec-2015

222 views 0 download

description

structure and class data

Transcript of Struktur Dan Class

Struktur

StrukturDigunakan untuk mengelompokkan data dengan type yg berbedadalam beberapa bahasa pemrograman biasa nya disebut sebagai recordcontoh :

struct data_tanggal{

int tahun ;int bulan ;int tanggal ;

} ;

data_tanggal adalah nama dari struktur yg di buat dan tahun

bulantanggal

disebut sebagai anggota dari struktur data_tanggal

Struktur

Untuk mendefinisikan struct variable-name di gunakan cara seperti mendefinisikan typa data

data_tanggal tgl_lahir

data_tanggal adalah nama struktur nya tgl_lahir adalah variabel-name dari data_tanggal

jadi tgl_lahir mempunyai 3 anggota yaitu : tahun,bulan,tanggal

untuk mengakses nya di gunakan dot operator seperti tgl_lahir.tahun

tgl_lahir.bulantgl_lahir.tanggal

Struktur

dapat pula suatu struktur berada dalam struktur misal

struct data_pegawai{

int nip ;char nama[25];data_tanggal tgl_lahir;

} rec_peg ;

jadi untuk mengakses nya

rec_peg.niprec_peg.namarec_peg.tgl_lahir.tahunrec_peg.tgl_lahir.bulanrec_peg.tgl_lahir.tanggal

ClassKelas merupakan struktur data dari objek yg mirip

dengan strukturstruct buku

{char judul[20];char pengarang[20];

int jumlah;} ;

class Buku{

public :char judul[20];char pengarang[20];

int jumlah;} ;

#include <iostream.h>#include <string.h>

struct buku {char judul[20];char pengarang[20];

int jumlah;} ;

int main(){

buku novel ; // pendefinisian var struktur

strcpy(novel.judul, "Ramayana");strcpy(novel.pengarang, "Narayan");novel.jumlah = 12;

cout << novel.judul << endl;cout << novel.pengarang << endl;cout << novel.jumlah << endl;

return 0;}

#include <iostream.h>#include <string.h>

class Buku {public :char judul[20];char pengarang[20];

int jumlah;} ;

int main(){Buku novel ; // pendefinisian var struktur

strcpy(novel.judul, "Ramayana");strcpy(novel.pengarang, "Narayan");novel.jumlah = 12;

cout << novel.judul << endl;cout << novel.pengarang << endl;cout << novel.jumlah << endl;

return 0;}

#include <iostream.h>#include <string.h>

class Buku{private :char judul[20];char pengarang[20];int jumlah;

public :void inisialisasi(char *Judul, char *Pengarang, int Jumlah)

{strcpy(judul, Judul);strcpy(pengarang, Pengarang);jumlah = Jumlah;}

void info(){cout << "Judul : " << judul << endl;cout << "Pengarang : " << pengarang << endl;cout << "Jumlah : " << jumlah << endl;}} ; // end class

int main() {Buku novel ; // pendefinisian var struktur (object)novel.inisialisasi("Ramayana", "Narayan", 12);novel.info();return 0;}

Class

Penggunaan private digunakan pada kelas untuk memproteksi anggota-anggota tertentu pada

kelas, agar tidak dapat diakses di luar kelas secara langsung

Contoh perhitungan luas segi empat

class area { private:

float a, b, c;public:

float x, y ;area (float x, float y) //konstruktor{a = x; b = y; cout << "harga a : " << a << endl; cout << "harga b : " << b << endl << endl;} ; // fungsi utk cetak hrg parameter~area() //destruktor{

cout << "Stop " << endl;};

void hasil (){ c = a * b; cout << "Hasil : " << c << endl;}

};

int main() {

area luas(2, 4.5);luas.hasil();return 0;

}

Membuat header// penulisan class sebagai header// harus didahului dengan statement #ifndef// dan diakhiri dengan #endif// disini digunakan konstruktor// nama konstruktor harus sama dengan nama class// konstruktor tidak mempunyai nilai balik termasuk tanpa void// dan harus diletakkan pada area public

#ifndef __luas#define __luas....#endif

#ifndef __luas#define __luas

class area { private: float a, b, c;

public: float x, y ; area (float x, float y) //konstruktor

{a = x;b = y;cout << "harga a : " << a << endl;cout << "harga b : " << b << endl << endl;} ; // fungsi utk cetak hrg parameter

~area() //destruktor{cout << "Stop " << endl;};

void hasil () { c = a * b; cout << "Hasil : " << c << endl; } };#endif

// Program untuk menghitung luas segi empat// dengan menggunakan class

#include <iostream.h>#include <math.h>#include "luas.h"

int main() {

area luas(2, 4.5);luas.hasil();return 0;

}

Konstruktor dan Destruktor

Konstruktor

adalah suatu fungsi anggota yg mempunyai nama yg sama dengan nama class.kegunaan nya :- mengalokasikan ruang bagi sebuah object- memberi nilai awal thd anggota data sebuah object- membentuk tugas tugas umum lainnyacontoh:class kompleks {

private: double re;

double im public:

Kompleks(); void info(); };

Konstruktor

Nama konstruktor sama dengan nama class

Konstruktor tidak mempunyai nilai balik (bahkan tanpa void)

Konstruktor harus diletakkan di bagian public

class Kompleks{ private:

double x, y ;

public:Kompleks(); // konstruktor (tanpa type data)void info();

};

int main(){ Kompleks p ; //mendefinisikan object p

p.info();

return 0;}

//definisi fungsi anggota class KompleksKompleks::Kompleks(){ cout << "konstruktor dijalankan ...." << endl;

x = 5.2;y = 7.9;

}

void Kompleks::info(){ cout << "harga x : " << x << endl;

cout << "harga y : " << y << endl;}

konstruktor dijalankan ....harga x : 5.2harga y : 7.9

class Kompleks{ private:

double x, y ;

public:Kompleks(); // konstruktor (tanpa type data)~Kompleks(); // dekonstruktorvoid info();

};

int main(){ Kompleks p ; //mendef object p

p.info();

return 0;}

//definisi fungsi anggota class KompleksKompleks::Kompleks(){ cout << "konstruktor dijalankan ...." << endl;

x = 5.2;y = 7.9;

}Kompleks::~Kompleks(){ cout << "Destruktor jalan.... proses selesai";}

void Kompleks::info(){ cout << "harga x : " << x << endl;

cout << "harga y : " << y << endl;}

konstruktor dijalankan ....harga x : 5.2harga y : 7.9Destruktor jalan.... proses selesai

class Buku{ private :

char judul[20];char pengarang[20];int jumlah;public :Buku(char *Judul * char *Pengarang,int Jumlah) ;~Buku();void info() ;

} ;

int main(){ Buku novel("Ramayana", "Narayan", 12);

novel.info();return 0;

}

Buku::Buku(char *Judul, char *Pengarang,int Jumlah)

{ strcpy(judul, Judul);strcpy(pengarang, Pengarang);jumlah = Jumlah;

}Buku::~Buku(){ cout << "Selesai... " << endl; }void Buku::info(){ cout << "Judul : " << judul << endl;

cout << "Pengarang : " << pengarang << endl;cout << "Jumlah : " << jumlah << endl;

}

Membuat header sendiri

Jika suatu class ingin digunakan pada sejumlah program, akan lebih baik jika class didefinisikan sebagai file atau header yg terpisah seperti :

// membuat file class sebagai header (buku.h)#ifndef __buku#define __bukuclass Buku{ private :

char judul[20];char pengarang[20];int jumlah;public :Buku(char *Judul, char *Pengarang,

int Jumlah){ strcpy(judul, Judul);

strcpy(pengarang, Pengarang);jumlah = Jumlah;

}void info(){ cout << "Judul : " << judul << endl;

cout << "Pengarang : " << pengarang << endl;cout << "Jumlah : " << jumlah << endl;

}} ;#endif

#include <iostream.h>#include <string.h>#include "buku.h">

int main(){ Buku novel("Ramayana", "Narayan", 12);

// novel didefinisikan sebagai class Buku// langsung di beri hargaBuku fiksi("Jurassic Parc", "Michael Crichton", 3);

novel.info();fiksi.info();

return 0;}

Jika class buku dibuat sebagai prototype

// membuat file class sebagai header#ifndef __buku1#define __buku1

class Buku{ private :

char judul[20];char pengarang[20];int jumlah;

public :Buku(char *Judul, char *Pengarang,

int Jumlah) ;

void info();

} ;#endif

#include <iostream.h>#include <string.h>#include "buku1.h">Buku::Buku(char *Judul, char *Pengarang,

int Jumlah){ strcpy(judul, Judul); strcpy(pengarang, Pengarang); jumlah = Jumlah;}void Buku::info(){ cout << "Judul : " << judul << endl; cout << "Pengarang : " << pengarang << endl; cout << "Jumlah : " << jumlah << endl;}int main()

{ Buku novel("Ramayana", "Narayan", 12);// novel didefinisikan sebagai class Buku// langsung di beri hargaBuku fiksi("Jurassic Parc", "Michael Crichton", 3);

novel.info();fiksi.info();

return 0;}

Class object local dan global

Sebuah object dapat didefinisikan seperti variabel local dan global

Sebuah object disebut sebagai object global jika didefinisikan di luar fungsi

class Kata{ private:

char nama[20];public:Kata (char *nama); // konstruktor~Kata() ; // destruktor

} ;Kata p("p"); // object globalint main(){ cout << " awal fungsi .... "<< endl;

Kata x("x"); // definisikan var anggota x berisi xxxxKata y("y"); // definisikan var anggota y berisi yyyycout << " akhir fungsi ...." <<endl;return 0;

}// definisi fungsi anggotaKata::Kata(char *nama){ strcpy(Kata::nama, nama); cout << "konstruktor object " << Kata::nama << endl;}

Kata::~Kata(){ cout << "destruktor object " << endl;}

konstruktor object p awal fungsi ....konstruktor object xkonstruktor object y akhir fungsi ....destruktor objectdestruktor objectdestruktor object

Class object local dan global

Jika suatu object didefinisikan secara global, maka konstruktor tersebut akan dilaksanakan sebelum fungsi main() di proses

Jika suatu object didefinisikan secara local, maka konstruktor akan dilaksanakan saat object bersangkutan di ciptakan

Destruktor object local akan dilaksanakan saat fungsi yg mendefinisikan berakhir

Destruktor object global akan dilaksanakan saat fungsi main() berakhir

Pointer ke obj dan obj dynamic

Jika kita bermaksud mendefinisikan sebuah pointer untuk menunjuk ke suatu object, maka pernyataan nya

Buku *nonfiksi Jika pointer nonfiksi diinginkan untuk menunjuk suatu object

berkelas Buku, pernyataan nya

nonfiksi = new Buku(“Turbo C++”, “Borland”, 5)

Untuk mengakses digunakan operator -> untuk mengganti . (dot)

nonfiksi->info() ;

atau

(*nonfiksi). Info();

#include <iostream.h>#include <string.h>#include "buku1.h">

Buku::Buku(char *Judul, char *Pengarang,int Jumlah){ strcpy(judul, Judul);

strcpy(pengarang, Pengarang);jumlah = Jumlah;

}

void Buku::info(){ cout << "Judul : " << judul << endl;

cout << "Pengarang : " << pengarang << endl;cout << "Jumlah : " << jumlah << endl;

}int main()

{ Buku *nonfiksi;nonfiksi = new Buku("Programming C", "Borland", 3);nonfiksi->info(); // atau(*nonfiksi).info();return 0;

}

Inheritance (pewarisan)

Dalam C++ dimungkinkan untuk mewariskan class atau fungsi ke kelas atau fungsi lain

Sifat ini disebut pewarisan (Inheritance) Class yg mewarisi sifat kelas lain disebut

turunan (derived clas)Class yg mewariskan sifat ke kelas lain

disebut class dasar (base class)

Sifat A Sifat A

Sifat BSifat B

Sifat C

Sifat yg di wariskan

Sifat spesifikClass dasar

Class turunan

class Buku{ private :

char judul[20];char pengarang[20];int jumlah;public :void inisialisasi(char *Judul, char *Pengarang,

int Jumlah){ strcpy(judul, Judul);

strcpy(pengarang, Pengarang);jumlah = Jumlah;

}void info(){ cout << "Judul : " << judul << endl;

cout << "Pengarang : " << pengarang << endl;cout << "Jumlah : " << jumlah << endl;

}} ;

class Turunan : public Buku{ public:

void info_turunan(){ cout<<"info turunan di jalankan....." << endl;}

};int main(){ Buku novel ; // pendefinisian var novel sbg class Buku

novel.inisialisasi("Ramayana", "Narayan", 12);novel.info();Turunan anak;anak.info_turunan();anak.inisialisasi("C++", "Borland", 5);anak.info();return 0;

}

Judul : RamayanaPengarang : NarayanJumlah : 12info turunan di jalankan.....Judul : C++Pengarang : BorlandJumlah : 5

class Kendaraan{ private:

char nama[15];public:Kendaraan(char *nama_kendaraan = "XXX"){ strcpy(nama, nama_kendaraan);

cout << "Hidupkan kendaraan anda..." << endl;}~Kendaraan(){ cout << "Matikan mesin kendaraan anda..." << endl;}

void info_kendaraan(){ cout << nama << " sedang berjalan .." << endl;}

};

class Truk : public Kendaraan{ public:

Truk(char *nama_truk) : Kendaraan(nama_truk) { cout << "Hidupkan mesin truk ... " << endl;}~Truk(){ cout << "Matikan mesin truk..." << endl;}

};

int main(){ Truk fuso("Truk Fuso");

fuso.info_kendaraan();cout << "Akhir program... " <<endl;return 0;

}

Hidupkan kendaraan anda...Hidupkan mesin truk ...Truk Fuso sedang berjalan ..Akhir program...Matikan mesin truk...Matikan mesin kendaraan anda...

Polymorphism

Suatu fungsi anggota dari suatu class dapat dijadikan sebagai fungsi virtual

Jika fungsi ini dideklarasikan kembali pada class turunan dan suatu pointer yg menunjuk kelas dasar diciptakan, pointer dapat memilih object yg tepat, sekiranya fungsi anggota tersebut dipanggil via pointer

class dasar

class Turunan 1

class Turunan 2

pointer

PointerDapatMenunjukKe objectBer kelasturunan

Pointer didefinisikanMenunjuk kelas dasar

class Mahluk{ public:

void informasi(){ cout << "informasi pd mahluk..."<<endl;}virtual void keterangan(){cout<< "keterangan pada mahluk...." <<endl;}

};

class Mamalia : public Mahluk{ public:

void informasi(){cout << "informasi pada mamalia..." << endl;}void keterangan(){cout << "keterangan pada mamalia.... " << endl;}

};

class Sapi : public Mamalia{ public:

void informasi(){cout << "informasi pd sapi..." << endl;}void keterangan(){cout << "keterangan pada Sapi ... " << endl;}

};

int main(){ Mamalia mamalia; // definisikan obj mamalia

Sapi sapi_sumba; // def sapi_sumbaMahluk *binatang; // def pointer ke obj berkelas mahluk

binatang = &mamalia ;binatang->informasi();binatang->keterangan();

cout <<"=====================" << endl; binatang = &sapi_sumba; binatang->informasi(); binatang->keterangan(); return 0;

}

informasi pd mahluk...keterangan pada mamalia....=====================informasi pd mahluk...keterangan pada Sapi ...

Template fungsi dan class

Template sering disebut sebagai blue print, yang berfungsi untuk mendupilkasikan sesuatu

Template fungsi sangat bermanfaat untuk fungsi yg menangani tugas yg sama hanya berbeda pada type datanya

//awal templatetemplate <class T>void tukar (T &x, T &y){ T temp;

temp = x;x = y ;y = temp ;

} // akhir template

// prototype fungsivoid tukar (int &x, int &y);void tukar (double &x, double &y);

int main(){ double p = 12.345;

double q = 98.765;cout << "p = "<< p << " q = " << q << endl;tukar (p, q);cout << "p = "<< p << " q = " << q << endl;

int a = 55;int b = 88;cout << "a = "<< a << " b = " << b << endl;tukar (a, b);cout << "a = "<< a << " b = " << b << endl;return 0;

}

p = 12.345 q = 98.765p = 98.765 q = 12.345a = 55 b = 88a = 88 b = 55