Class C++

Class C++
Pengertian Class C++
Kelas adalah salah satu abstraksi (pemodelan) data atau disebut juga
abstract data type. Konstruksi kelas adalah sebagai berikut :




class nama-kelas {
// bagian public
public :
// bagian private
private :
// bagian protected
protected :
};
Biasanya, data termasuk pada bagian private (information hiding), sedangkan
method (fungsi) berada pada bagian public. Pada bagian public inilah setiap objek
dari kelas tersebut dapat saling berkomunikasi lewat message passing (pertukaran
pesan). Method biasanya merupakan fungsi yang memanipulasi data dari kelas yang
bersangkutan.


Kelas CurrencyUntuk mempelajari kelas, kita gunakan kelas currency untuk contoh. Objek
dari setiap kelas currency ini akan mempunyai method sebagai berikut:
a. memberikan nilai ke objek
b. menentukan komponen (tanda, banyaknya dollar, maupun banyaknya sen)
c. menambah dua objek bertipe currency

d. menaikkan nilai
e. menampilkan output tipe currency
Di bawah ini diberikan konstruksi dari kelas tipe currency.
 

#include <iostream.h>
#include <stdlib.h>
#include "bool.h"
enum sign {plus, minus};
class Currency {
public:
Currency(sign s = plus, unsigned long d = 0, unsigned int c = 0);
~Currency() {}
bool Set(sign s, unsigned long d, unsigned int c);
bool Set(float a);
sign Sign() const {return sgn;}
unsigned long Dollars() const {return dollars;}
unsigned int Cents() const {return cents;}
Currency Add(const Currency& x) const;
Currency& Increment(const Currency& x);
void Output() const;
private:
sign sgn;
unsigned long dollars;
unsigned int cents;
};

Kelas Currency mempunyai 3 data member, yaitu sgn yang mempunyai
kemungkinan nilai plus atau minus, dollars untuk menyimpan nilai utuh dari pecahan
dollar dan cents untuk menyimpan nilai pecahan. Misalnya $1.25 akan disimpan
sebagai dollars = 1, dan cents = 25, sedangkan sgn bernilai plus.
Method Set digunakan untuk mengubah data member. Terdapat dua method
Set, yang pertama mempunyai 3 parameter yang langsung menspesifikasi setiap
data member. Sementara yang kedua bertipe float yang nantinya harus dipecah
menjadi 3 bagian seperti halnya 3 data member, yaitu tanda, bagian dollar dan
bagian sen.


Preprocessor (1), (2), dan diakhiri #endif digunakan untuk menjamin bahwa
kelas Currency hanya akan dikompilasi sekali. Isi dari bool.h adalah sebagai berikut :

 
 

#ifndef bool_
#define bool_
typedef int bool;
const bool false = 0;
const bool true = 1;
#endif

Tipe bool mempunyai dua alternatif harga yaitu false dan true. False untuk
menggantikan nilai 0, sedangkan true untuk menggantikan nilai 1.


Program 2.3. Konstruktor kelas Currency.
Currency::Currency(sign s, unsigned long d, unsigned int c)
{
if (c > 99)
{
cerr << "Cents should be < 100" << endl;
exit(1);}
sgn = s; dollars = d; cents = c;
}


Konstruktor Currency langsung dispesifikasi membentuk objek Currency yang
terdiri dari tanda, bagian dollar dan bagian sen. Khusus bagian sen, oleh karena 1
dollar sama dengan 100 sen maka harga c tidak boleh melebihi 99 (3), yang apabila
dilanggar akan memberikan sinyal error (5) dan keluar dari program (6).
Pembentukan objek dilakukan dengan meng-assign pada setiap data member (7),
berturut-turut s meng-assign sgn, d meng-assign dollars, dan c meng-assign cents.


 
Program 2.4. Memberikan harga pada objek dengan 3 komponen.
bool Currency::Set(sign s, unsigned long d, unsigned int c)
{
if (c > 99) return false;
sgn = s; dollars = d; cents = c;
return true;
}

Untuk mengubah data member, selain pada saat dibuat objeknya, kita dapat
mengubahnya dengan method Set yang perilakunya mirip dengan konstruktor
Currency. Hanya saja method Set ini akan mengembalikan nilai true jika berhasil
melakukan perubahan, false jika terjadi kesalahan, artinya data member tidak
diubah nilainya.


Program 2.5. Memberikan harga pada objek dengan tipe float dan
kemudian mengkonversinya ke bentuk komponen demi komponen.
bool Currency::Set(float a)
{
if (a < 0) {sgn = minus; a = -a;}
else sgn = plus;
dollars = a;
cents = (a + 0.001 - dollars) * 100;
return true;
}


Method Set dengan parameter bertipe float digunakan untuk mengubah data
member dengan memecah a menjadi unsur-unsur ketiga data member Currency.
Yang pertama, apakah a bernilai negatif atau positif. Jika negatif maka tanda sgn
akan diberi nilai minus (3), dan nilai a harus selalu berharga positif (a = -a). Jika
positif nilai sgn diberi nilai plus (4). Oleh karena dollars bertipe long (int) maka (5)
akan mengambil nilai integernya saja (menggunakan konversi nilai). Sementara (6)
mengambil nilai sen dengan cara nilai float a dikurangi dengan bagian integernya,
dan supaya bernilai bulat maka dikalikan dengan 100. Method ini selalu
mengembalikan nilai true (7).



Program 2.6. Method untuk menjumlahkan dua
objek bertipe currency
Currency Currency::Add(const Currency& x) const
{
long a1, a2, a3;
Currency ans;
a1 = dollars * 100 + cents;
if (sgn == minus) a1 = -a1;
a2 = x.dollars * 100 + x.cents;
if (x.sgn == minus) a2 = -a2;
a3 = a1 + a2;
if (a3 < 0) {ans.sgn = minus; a3 = -a3;}
else ans.sgn = plus;
ans.dollars = a3 / 100;
ans.cents = a3 - ans.dollars * 100;
return ans;
}

Method Add digunakan untuk menambahkan sebesar x pada suatu objek
Currency. Pertama, nilai objek dikonversikan menjadi sen dan disimpan pada a1 (5).
Kita hanya akan memperlakukan setiap nilai dengan harga aslinya (6). Kedua, x juga
dikonversi menjadi sen dan disimpan pada a2 (7). Harga a2 juga diambil harga
aslinya (8). Ketiga, kedua nilai tadi kemudian dijumlahkan (9) disimpan pada a3. Yang
perlu diingat adalah bahwa baik dollars maupun cents selalu berharga positif. Untuk
itu operasi penambahan maupun pengurangan sebenarnya menggunakan operasi
aritmetika biasa, sehingga kita perlu mengkonversi setiap objek dengan harga
aslinya. Misalnya sgn = minus, dollars = 3, dan cents = 25 berarti harga aslinya
adalah -3.25.
Langkah terakhir, nilai a3 dikembalikan menjadi bentuk objek, sgn diberi nilai
dan a3 menjadi harga mutlak (10). Nilai dollars diambil nilai integernya saja (12),
kemudian nilai cents diambil dengan cara nilai a3 dikurangi nilai integernya (13).
Harga ans dikembalikan sebagai hasil penambahan (14).
Method Add dapat dipandang sebagai operator + dalam halaman ini.

 
Program 2.7. Method untuk menaikkan nilai objek sebanyak x.
Currency& Currency::Increment(const Currency& x)
{
*this = Add(x);
return *this;
}

Method Increment menggunakan method Add untuk memanipulasi data
member (3). Hanya saja, nilai objek "ini" (dan bukan objek lain) yang bertambah
nilainya dengan x (4). Method Increment dapat dipandang sebagai operator +=.


Program 2.8. Method untuk mencetak objek bertipe
currency
void Currency::Output() const
{
if (sgn == minus) cout << '-';
cout << '$' << dollars << '.';
if (cents < 10) cout << "0";
cout << cents;
}

Method Output digunakan untuk mencetak objek Currency. Kitapun juga bisa
mengubahnya untuk mata uang yang lain.


Program 2.9. Main fungsi untuk menguji-coba kelas currency
#include <iostream.h>
#include "curr1.h"
void main(void)
{ Currency g, h(plus, 3, 50), i, j;
g.Set(minus, 2, 25);
i.Set(-6.45);
j = h.Add(g);
j.Output(); cout << endl;
i.Increment(h);
i.Output(); cout << endl;
j = i.Add(g).Add(h);
j.Output(); cout << endl;
j = i.Increment(g).Add(h);
j.Output(); cout << endl;
i.Output(); cout << endl;
}

Pada fungsi main dideklarasikan 4 objek Currency yaitu g, h, i, dan j (5).
Khusus objek h langsung diberi nilai awal $3.50. Objek g di-set bernilai -$2.25 (6).
Objek i di-set bernilai -$6.45 (7).
Objek j merupakan hasil penjumlahan dari h dan g, sehingga j bernilai $1.25
(8). Objek i ditambahkan nilainya dengan h menjadi -$2.95 (10). Kemudian objek j
merupakan hasil penjumlahan dari objek i, g dan h (12) menjadi bernilai -$1.70. Cara
lain operasi ini dengan menggunakan (14). Namun perbedaannya adalah nilai i
bertambah dengan g, sedangkan pada (12) nilai i tidak bertambah nilainya. Output
selengkapnya dari fungsi main di atas adalah sebagai berikut :


Di bawah ini diberikan tipe data abstrak yang berbeda untuk kelas currency.
 
Program 2.10. Versi 2 : Kelas Currency dengan menggunakan
representasi yang berbeda
enum sign {plus, minus};
class Currency {
public:
Currency(sign s = plus, unsigned long d = 0, unsigned int c = 0);
~Currency() {}
bool Set(sign s, unsigned long d, unsigned int c);
bool Set(float a);
sign Sign() const {if (amount < 0) return minus; else return plus;}
unsigned long Dollars() const
{if (amount < 0) return (-amount) / 100;
else return amount / 100;}
unsigned int Cents() const
{if (amount < 0) return -amount - Dollars() * 100;
else return amount - Dollars() * 100;}
Currency Add(const Currency& x) const;
Currency& Increment(const Currency& x)
{amount += x.amount; return *this;}
void Output() const;
private:
long amount;
};
      

Implementasi method dari kelas Currency di atas selengkapnya diberikan berikut
ini:



Program 2.11. Implementasi method kelas Currency versi 2
Currency::Currency(sign s, unsigned long d, unsigned int c)
{
if (c > 99)
{// too many cents
cerr << "Cents should be < 100" << endl;
exit(1);}
amount = d * 100 + c;
if (s == minus) amount = -amount;
}
bool Currency::Set(sign s, unsigned long d, unsigned int c)
{// Reset value.
if (c > 99) return false;
amount = d * 100 + c;
if (s == minus) amount = -amount;
return true;
}
bool Currency::Set(float a)
{
sign sgn;
if (a < 0) {sgn = minus; a = -a;}
else sgn = plus;
amount = (a + 0.001) * 100;
if (sgn == minus) amount = -amount;
return true;
}
Currency Currency::Add(const Currency& x) const
{
Currency y;
y.amount = amount + x.amount;
return y;
}
void Currency::Output() const
{
long a = amount;
if (a < 0) {
cout << '-';
a = -a;}
long d = a / 100;
cout << '$' << d << '.';
int c = a - d * 100;
if (c < 10) cout << "0";
cout << c;
}






 


EmoticonEmoticon