Dasar pemrograman C++

9
Modul Praktikum Dasar Pemrograman C++ 2010 MODUL 13 CLASS a. Konsep Class Dalam pemrograman berorientasi objek (OOP) class merupakan bangunan yang menjadi cetak biru untuk pembuatan objek dari class. Dalam pemrograman terstruktur class direpresentasikan sebagai struct. Bedanya, jika struct dapat didefinisikan di dalam atau di luar fungsi dan dipanggil secara langsung dengan menyebutkan nama struct dan field anggotanya maka pada class pengaksesan dan hak akses terhadap anggota-anggota classnya bergantung pada mode pengaksesan yang diberikan terhadap class tersebut. Class didefinisikan tepat di bawah header sebelum semua fungsi dibuat. Secara default mode akses class bersifat private, kecuali jika didefinisikan sendiri oleh pemrogram. Class memiliki tiga mode pengaksesan: 1. Public Class dengan mode pengaksesan public mengijinkan object untuk mengakses anggota class dari luar. Untuk lebih jelasnya perhatikan contoh class di bawah ini: 86 Andan Sperrow. – UNP KEDIRI #include <cstdlib> #include <iostream> using namespace std; class person //penulisan class = struct { public: //anggota yang bersifat public definisikan disini char nama[15]; int usia; void tambah_data(); //anggota class dapat berupa var dan fungsi }; void tampilkan (person orang); //prototipe fungsi global int main()

description

dasar program c++

Transcript of Dasar pemrograman C++

Page 1: Dasar pemrograman C++

Modul Praktikum Dasar Pemrograman C++ 2010

MODUL 13

CLASS

a. Konsep Class

Dalam pemrograman berorientasi objek (OOP) class merupakan bangunan yang menjadi cetak biru untuk pembuatan objek dari class. Dalam pemrograman terstruktur class direpresentasikan sebagai struct. Bedanya, jika struct dapat didefinisikan di dalam atau di luar fungsi dan dipanggil secara langsung dengan menyebutkan nama struct dan field anggotanya maka pada class pengaksesan dan hak akses terhadap anggota-anggota classnya bergantung pada mode pengaksesan yang diberikan terhadap class tersebut.

Class didefinisikan tepat di bawah header sebelum semua fungsi dibuat. Secara default mode akses class bersifat private, kecuali jika didefinisikan sendiri oleh pemrogram.

Class memiliki tiga mode pengaksesan:1. Public

Class dengan mode pengaksesan public mengijinkan object untuk mengakses anggota class dari luar.

Untuk lebih jelasnya perhatikan contoh class di bawah ini:

86 Andan Sperrow. – UNP KEDIRI

#include <cstdlib>#include <iostream>using namespace std;

class person //penulisan class = struct{ public: //anggota yang bersifat public definisikan disini char nama[15]; int usia; void tambah_data(); //anggota class dapat berupa var dan fungsi}; void tampilkan (person orang); //prototipe fungsi global

int main(){ person orang; //pemanggilan class di main() = pemanggilan struct orang.tambah_data(); //pemanggilan fungsi class di main tampilkan(orang); //pemanggilan fungsi di luar class system("PAUSE"); return EXIT_SUCCESS;}

Page 2: Dasar pemrograman C++

Modul Praktikum Dasar Pemrograman C++ 2010

Analisis:

Pada contoh program di atas class person memiliki anggota class yang dapat diakses secara public. Anggota class person terdiri dari variabel nama dan usia dengan tipe data char[15] dan int. Selain dua anggota class yang berupa variabel, class person juga memiliki anggota class yang berupa fungsi, yaitu fungsi tambah_data. Karena fungsi tambah_data bersifat public juga maka dia dapat langsung mengakses semua variabel anggota class person yang bersifat public juga (lihat void person::tambah_data()).

Berikutnya seperti biasa jika kita menuliskan listing program menggunakan beberapa fungsi hal yang harus dilakukan adalah mendefinisikan prototipe fungsi yang ada di dalam program pada baris sebelum main (lihat void tampilkan (person orang);), namun pendefinisian prototipe tidak berlaku pada fungsi yang menjadi anggota dari class karena prototipe fungsi telah didefinisikan di dalam class (lihat void tambah_data(); yang berada di dalam class person).

Untuk pemanggilan fungsi yang berada di luar fungsi main() seperti biasa kita tinggal memanggil nama fungsi dan parameternya. Perbedaan baru akan terjadi jika kita mengakses fungsi yang merupakan fungsi anggota, karena pengaksesan fungsi akan diperlakukan seperti field/anggota class meskipun bentuknya adalah fungsi (lihat orang.tambah_data(); pada fungsi main()).

Untuk pendefinisian kerja fungsi yang menjadi fungsi anggota suatu class digunakan operator skop (tanda ::). Operator skop yang terletak sebelum nama fungsi berarti fungsi tambah_data merupakan milik dari class person sehingga memiliki hak untuk mengakses semua anggota class person yang bersifat sama.

87 Andan Sperrow. – UNP KEDIRI

void person::tambah_data() // pemanggilan fungsi anggota class{ printf ("Nama: "); gets (nama); printf ("Usia: "); scanf ("%d", &usia); }

void tampilkan (person orang) //fungsi global tanpa nilai pengembalian{ printf ("Nama yang diinputkan: %s \n", orang.nama); printf ("Usia %s : %d tahun \n", orang.nama, orang.usia); }

Page 3: Dasar pemrograman C++

Modul Praktikum Dasar Pemrograman C++ 2010

2. PrivateAnggota class hanya dapat diakses dari anggota yang lain yang berada di

dalam class yang sama maupun friend-nya.Perhatikan contoh program di bawah ini:

88 Andan Sperrow. – UNP KEDIRI

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

using namespace std;class person{ private: char nama[15]; int usia; public: void tambah(char a[15], int &b); void input (char *name, int age) //fungsi untuk mengakses var private { strcpy (nama, name); usia=age; } void output();}; int main(int argc, char *argv[]){ person orang; char *A; char a[15]; int b; A=&a[0]; orang.tambah(a, b); orang.input (A, b); orang.output(); system("PAUSE"); return EXIT_SUCCESS;}

void person::tambah(char a[15], int &b){ person orang; printf ("Nama: "); gets (a); printf ("Umur: "); scanf ("%d", &b);}

void person::output(){ printf ("Info Data Personalia \n"); printf ("Nama: %s \n", nama); printf ("Usia: %d \n", usia); }

Page 4: Dasar pemrograman C++

Modul Praktikum Dasar Pemrograman C++ 2010

3. ProtectedAnggota class dapat diakses dari anggota lain yang berada di dalam class

yang sama, friend, dan turunannya.

b. Constructor Destructor

Constructor merupakan type khusus dari suatu subroutine yang dipanggil pada saat penciptaan objek dari suatu class. Selain bertugas mempersiapkan objek baru constructor juga menerima parameter untuk menginisialisasi setiap anggota variabel ketika objek baru dari sebuah class diciptakan. Nama constructor harus sama dengan nama classnya.

Kebalikan dari constructor adalah destructor. Jika constructor dipanggil pada saat penciptaan objek dari suatu class, destuctor dipanggil pada saat objek dari suatu class akan dihancurkan. Pendeklarasian destructor diawali dengan tanda tilde ~ diikuti oleh nama objek yang telah di-construct.

Constructor dan destructor akan otomatis dijlnkan pada saat objek class diciptakan. Tidak bertipe walaupun void sekalipun dan tdk punya return value.

Contoh penggunaan constructor dan destructor dalam class dapat dilihat pada contoh program di bawah ini:

Contoh program menghitung luas persegi panjang menggunakan constructor class:

89 Andan Sperrow. – UNP KEDIRI

#include <cstdlib>#include <iostream>

using namespace std;

class Persegi_Panjang{ private: int pjg, lbr;

public: Persegi_Panjang (int a,int b); //constructor class int area () { return (pjg*lbr); }};

Page 5: Dasar pemrograman C++

Modul Praktikum Dasar Pemrograman C++ 2010

Analisis:

Pada program penghitung luas persegi panjang di atas class Persegi_Panjang memiliki constructor class yang berfungsi menginisialisasi data input ke dalam variabel pjg dan lbr yang memiliki hak akses private. Oleh fungsi area data yang diinputkan user akan dihitung luasnya dan nilai hasilnya akan dikembalikan ke dalam fungsi area dengan nilai return bertipe integer. Pada fungsi main() kegiatan yang dijalankan berupa pemanggilan constructor class dan meminta hasil perhitungan luas untuk ditampilkan.

Contoh program menghitung luas persegi panjang menggunakan constructor dan destructor class:

90 Andan Sperrow. – UNP KEDIRI

Persegi_Panjang::Persegi_Panjang (int a, int b) { printf ("Input panjang: "); scanf ("%d", &a); printf ("Input lebar: "); scanf ("%d", &b);

pjg = a; lbr = b;} int main () { int a; int b;

Persegi_Panjang luas (a,b); printf("luas persegi: %d \n" , luas.area());

system("PAUSE"); return EXIT_SUCCESS;}

#include <cstdlib>#include <iostream>#include <conio.h>using namespace std;

class Persegi_Panjang{ private: int *width, *height; //jika variabel akan di-destroy pada akhir program

//maka var dilewatkan sebagai var pointer public: Persegi_Panjang (int a,int b); ~Persegi_Panjang(); int area () { return (*width * *height); } //jika pake destructor};

Page 6: Dasar pemrograman C++

Modul Praktikum Dasar Pemrograman C++ 2010

Analisis:

Listing program diatas sebenarnya sama dengan contoh program sebelumnya, perbedaannya hanya pada penggunaan destructor yang digunakan untuk menghapus space memory yang digunakan untuk menyimpan data width dan height. Constructor dan destructor class didefinisikan di dalam class Persegi_Panjang dan bersifat public.

91 Andan Sperrow. – UNP KEDIRI

Persegi_Panjang::Persegi_Panjang (int a, int b) { printf ("Input panjang: "); scanf ("%d", &a); printf ("Input lebar: "); scanf ("%d", &b);

//jika pake constructor dan destructor //width dan height dilewatkan sebagai pointer //sehingga perlu dibuat inisialisasi memory dinamic dengan new

width=new int; height=new int; *width=a; *height=b;}

//destructor akan otomatis dijalankan tanpa harus dipanggil//oleh fungsi main()

Persegi_Panjang::~Persegi_Panjang(){ //proses penghancuran variabel pointer width dan height

delete width; delete height; printf ("variabel panjang dan lebar telah dihancurkan \n");

//lihat isi variabel panjang dan lebar setelah proses destruct

printf ("Isi panjang: %d \n Isi lebar: %d \n", width, height); getch(); } int main () { int a; int b;

Persegi_Panjang rect (a,b); printf("luas persegi: %d \n" , rect.area());}

Page 7: Dasar pemrograman C++

Modul Praktikum Dasar Pemrograman C++ 2010

Jika pada contoh program sebelumnya variabel pjg dan lbr didefinisikan sebagai tipe data dasar maka berbeda dengan contoh program diatas pendefinisian variabel private width dan height menggunakan variabel pointer. Hal ini dilakukan karena variabel yang dapat di-destroy hanya variabel yang bersifat dinamis semisal pointer sehingga pada saat penciptaan class yang di dalamnya berisi proses input data, alamat variabel a dan b akan ditangkap oleh pointer width dan height setelah pengalokasian memory dilakukan.

Proses destructor class akan dijalankan secara otomatis oleh program untuk membebaskan kembali memory yang dipakai untuk menyimpan nilai width dan height ke dalam heap sehingga memory kosong dapat digunakan untuk kegiatan komputasi yang lain.

Pada program di atas, perintah: printf ("Isi panjang: %d \n Isi lebar: %d \n", width, height); hanya untuk menguji nilai width dan height setelah isi variabel width dan height dibebaskan sehingga hasil outputnya dapat berupa alamat acak di memory dan akan menghasilkan nilai yang berbeda pada tiap PC tergantung ruang kosong yang diakses variabel di memory.

TUGAS:

1. Bagaimana listing program pada contoh 1 diatas jika proses input dilakukan pada saat class diciptakan? (clue: gunakan constructor class untuk inisialisasi dan input data)

2. Modifikasi listing program no.1 sehingga pada saat akhir proses dilakukan pembebasan memory.

3. Tambahkan fungsi untuk menghitung masa produktif user jika masa produktif seseorang mulai menurun pada usia 40 tahun. Tampilkan pesan “Usia produktif Anda telah berakhir n tahun yang lalu ” jika usia yang diinputkan >40 tahun, dan minta user untuk mengulang input usia jika usia yang diinputkan <5 atau >99.

92 Andan Sperrow. – UNP KEDIRI