30 Nov 2009

Pertemuan 8 PBO


Pada pertemuan ini, saya akan membahas mengenai Friend dan Operator Overloading dalam Class ..


Apa itu friend ??? 

Friend adalah fungsi yang bukan merupakan anggota dari suatu class, tapi dapat mengakses anggota kelas yg bersifat private dan protected.
Pemakaian friend merupakan suatu kontradiksi, mengapa??
Karena tujuan utama dari pbo adalah pengkapsulan dan pembatasan akses data, sedangkan dengan adanya friend, semua data dalam class menjadi bisa diakses oleh fungsi yang bukan merupakan anggota class itu sendiri.


Cara pemakaian friend cukup mudah, kita tinggal menambahkan kata “friend” di depan nama fungsi yang akan kita buat, dan deklarasikan prototype fungsi di dalam class (public).


// contoh codingan pemakaian friend


#include

class mahasiswa
{
   private :
       int nilai;
       char nama[20];

   public :
       mahasiswa(); // constructor

       void inisialisasi(int nilai1, char *nama1);



       //prototype friend function dideklarasikan dalam class
       friend void show(mahasiswa satu, int a);

        ~mahasiswa() // destructor
        {}
};


void main()
{
   mahasiswa satu,dua;

   satu.inisialisasi(100, "aku");
   dua.inisialisasi(90, "kamu");

   show(satu,1);
   show(dua,2);

   cin.get();
}

mahasiswa::mahasiswa()
{
   nilai = 0;
   strcpy(nama,"");
}

void mahasiswa::inisialisasi (int nilai1, char *nama1)
{
   nilai = nilai1;
   strcpy(nama, nama1);
}

//friend function
void show(mahasiswa satu, int a)
{
   cout << "Nama mahasiswa " << a << " : " << satu.nama << endl; 

   cout << "Nilai mahasiswa " << a << " : " << satu.nilai << endl << endl;
}

Overloading Operator 

Tujuannya adalah untuk memudahkan operasi terhadap data, khususnya yang melibatkan objek. Perlu diingat, meskipun operator sudah dioverload, kaidah pemakaian operator dan prioritas operator tidak berubah. 

Operator yang tidak dapat di overload 
.           .*          ::           ?:           sizeof 


// contoh codingan pemakaian overloading operator

#include

class parkir
{
     private :
         int mobil;
         int motor;

     public :
         parkir(int mob=0, int mot=0);

         void get(int a);

         parkir operator + (parkir ob);
};

void main()
{
    parkir obj1(10,20);
    parkir obj2(45,25);
    parkir obj3;

    obj3 = obj1 + obj2;

    obj1.get(1);
    obj2.get(2);
    obj3.get(3);

    cin.get();
}

parkir::parkir(int mob, int mot)
{
     mobil = mob;
     motor = mot;
}

void parkir::get(int a)
{
    cout << "mobil " << a << " : " << mobil << endl;
    cout << "motor " << a << " : " << motor << endl << endl;
}

parkir parkir::operator + (parkir ob)
{
     parkir tmp; // objek penampung

    tmp.mobil = mobil + ob.mobil;
    tmp.motor = motor + ob.motor;

    return(tmp);
}

4 Nov 2009

Pertemuan 5 PBO


Dalam class, dikenal dengan istilah encapsulation.
Encapsulation adalah pengelompokkan yang dimaksudkan untuk melindungi informasi/data agar tidak dapat diakses secara sembarangan.

Ada 3 jenis tipe data dalam class, yaitu
  1. Public, bisa diakses dimana saja.
  2. Private, hanya bisa diakses class itu sendiri.
  3. Protected, bisa diakses class itu sendri dan kelas turunannya.

Contoh :

misalkan ada 3 class, yaitu class A, B, dan C (turunan class A)
A memiliki 3 type data, yaitu :
X = public
Y = private
Z = protected

nilai X = bisa diakses class A B dan C
nilai Y = bisa diakses class A saja
nilai Z = bisa diakses A dan C (kelas turunan dari A)

Dalam class, ada istilah constructor dan destructor.
Constructor biasanya dijalankan saat object di create, sedangkan destructor dijalankan sesaat sebelum object di delete.

Contoh :

class mobil
{
      public :

//constructor
             mobil()
             {
                  a = 10;
             }

//destructor
            ~mobil()
            {
                  a = 0;
            }

21 Okt 2009

PBO Pertemuan 4


Abstract Data Type ( ADT )  didefinisikan sebagai tempat penyimpanan data secara berkelompok yang mampu berisi berbagai tipe data baik homogen maupun heterogen.
 

ADT Homogen adalah Array, yang mampu menampung beberapa variabel yang memiliki tipe data yang sama.
ADT Heterogen adalah Struct, yaitu tipe data bentukan yang berisi kumpulan variabel dengan tipe data sama atau berbeda, struct juga dapat menyimpan variabel array dan struct (disebut juga nested struct, yang berarti struct dalam struct).
 

Contoh struct yang paling mudah adalah Struct Data Mahasiswa yang biasanya berisi elemen-elemen seperti :

Ø    NIM, berupa char yang terdiri dari 10 digit angka
Ø    Nama, berupa char
Ø    Nilai TM, berupa integer
Ø    Nilai UTP, berupa integer
Ø    Nilai UAS, berupa integer
Ø    IPK, berupa float
 

Cara pengaksesan struct
Operator dot (.) untuk mengakses member struct dg variable biasa / array
Operator arrow (->) untuk mengakses member struct dg variable pointer/ref

Typedef digunakan Untuk memberikan nama alias dari suatu tipe data.
  
Contoh coding menghitung nilai IPK Mahasiswa
 

#include "iostream.h"
#include "stdio.h"
#include "string.h"

struct Mtk
{  char kode[5];
    char nMtk[20];
    int sks;
    int nilai;
    int grade;
    int bobot;
};


typedef struct Mahasiswa  // contoh typedef
{   char nim[11];
     char nama[25];
     Mtk x[50]; // contoh nested struct
} Mhs;

void ini (int x)  // function untuk mengkonversi nilai ke grade
{   char grade;
     if((x>=85)&&(x<=100))
     grade = 'A';
     if((x>=75)&&(x<=84))
     grade = 'B';
     if((x>=65)&&(x<=74))
     grade = 'C';
     if((x>=50)&&(x<=64))
     grade = 'D';
     if((x<=49)&&(x>=0))
     grade = 'E';
     cout << "Grade = " << grade << endl;
}

int itu(int x)  // function untuk mengkonversi nilai ke bobot
 {  int bbt;
     if(x>=85) bbt=4 ;
     if((x>=75)&&(x<=84)) bbt=3;
     if((x>=65)&&(x<=74)) bbt=2;
     if((x>=50)&&(x<=64)) bbt=1;
     if(x<=49) bbt=0;
     return(bbt);
 }

void main()
{
    int bobot,ttl[10],i,jum;
    float js=0, IPK=0;
   {
     Mhs data;
     cout << "Nama               : ";
     cin >> data.nama;
     cin.clear();
     cin.sync();
     cout << "NIM                : ";
     cin >> data.nim;
     cin.clear();
     cin.sync();
     do{  cout << "Jumlah mata kuliah : ";
            cin >> jum;
            cin.clear();
             cin.sync();
         } while(jum<2||jum>10);

      cout << endl;

      for(i=0;i
     {
        cout << "Kode Mata Kuliah : ";
        cin >> data.x[i].kode;
        cin.clear();
        cin.sync();
        cout << "Nama Mata Kuliah : ";
        cin >> data.x[i].nMtk;
        cin.clear();
        cin.sync();
        cout << "Jumlah SKS       : ";
        cin >> data.x[i].sks;
        cin.clear();
        cin.sync();
        cout << "Nilai            : ";
        cin >> data.x[i].nilai;
        cin.clear();
        cin.sync();

        ini(data.x[i].nilai);

        bobot = itu (data.x[i].nilai);
        cout << "Bobot = " << bobot << endl;

        ttl[i]=(data.x[i].sks*bobot);
        IPK+=ttl[i];
        js+=data.x[i].sks;
        cout << endl;
     }

     cout.precision(2);
     cout.setf(ios::fixed);
     cout << "Nilai IPK = " << (IPK/js);
     cin.clear();
     cin.sync();
  }
  cin.get();
}