download

Matakuliah
Tahun
Versi
: T0044/Pemrograman Berorientasi Obyek
: 2005
: 1.0
Pertemuan 6
Encapsulation Lanjutan
1
Learning Outcomes
Pada akhir pertemuan ini, diharapkan mahasiswa
akan mampu :
• Menghasilkan Program C++ dengan
konsep Encapsulation
2
Outline Materi
• Object constant dan Member Function
constant
• Sintaks Initializer Member Class
• Nested Object
• Pointer this
• Static Class Member
• Friend Function
• Operator Overloading
3
Object Constant
• Untuk object yang tidak dapat di-modify
– Jika di-modify akan menyebabkan Compiler
error
Contoh object konstant:
const Time noon( 12, 0, 0 );
• deklarasi konstanta object noon dari
class Time yg di-inisial 12
4
Member Functions Constant
• Member function utk const objects juga harus dibuat const
– Tidak bisa me-modify object
• const pada prototype dan definisinya:
int getHour() const; // Prototype
int Time::getHour() const
{ return hour; }
// Definisi
• Constructor dan Destructor tidak boleh di buat const Karena harus
dapat me-modify object
– Constructor  utk initialsasi objects
– Destructor  utk termination object
5
Sintaks Initializer Member
Class
• Initialisasi dg sintaks initializer member dapat
digunakan untuk semua const data member.
#include <iostream.h>
class Increment
{ public:
Increment (int c = 0, int i = 1 ); // default constructor
void addIncrement ( ) { count += increment; }
void print ( ) const; // const member function
{ cout << "count = " << count
<< ", increment = " << increment << endl; }
private:
int count;
const int increment; // const data member
};
6
Sintaks Initializer Member
Class
// definisi constructor
Increment::Increment (int c, int i )
: count( c ),
// initializer non-const member
increment( i ) // initializer const member
{ } //empty body
void main()
{ Increment value( 10, 5 );
cout << "Before incrementing: ";
value.print();
for ( int j = 0; j < 3; j++ )
{ value.addIncrement();
cout << "After increment " << j + 1 << ": ";
value.print();
}
}
Before incrementing: count
After increment 1: count =
After increment 2: count =
After increment 3: count =
= 10, increment
15, increment =
20, increment =
25, increment =
= 5
5
5
5
7
Nested Object
• Sebuah Class dapat berisi object dari class lain  Composite /
Nested Object
• Member object disusun berurutan
– class dg member objects (host objects) berada setelah deklarasi
class host object tsb  perlu class prototype
• Contoh:
class B; // class prototype
class A
Class B Berisi Class A
{ public: int i;
}
class B
{ public: int j;
A obj_A; //host object
}
B obj_B; // create object class B
Obj_B.Obj_A.i = 0; // inisialisasi member class A via object B
8
Pointer “this”
• Tiap class member function memiliki hidden
parameter -> pointer "this“
• "this" menunjuk ke individual object.
• pointer "this" dpt digunakan secara explicit
9
Static Class Member
• static Data Member
– “Class-wide” data
• property class tdk specific pada object tertentu
• Seperti global variables, tapi punya class scope
• Hanya accessible ke object dgn class yg sama
– Efisien untuk single copy data
• Dimana hanya static variable yg akan di-update
–
–
–
–
Initialized hanya 1 kali pada file scope
Berlaku walaupun suatu class tidak punya object
Berlaku independent terhadap objects
Berlaku utk public, private & protected
10
Static Class Member
– Dpt di akses lewat object apapun dari sebuah class
– Utk public static variables
• Dapat diakses dgn operator binary scope resolution (::)
Employee::count
– Utk private static variables
• Jika suatu class tdk ada object  Hanya dapat diakses via
public static member function dgn operator binary scope
resolution (::)
Employee::getCount()
• static member functions Tdk dpt
mengakses non-static data / function
11
Friend Function
• friend function di definisikan di luar dari
class’s scope namum memiliki hak akses
ke semua members dari class tersebut
• Deklarasi friend funcion dg keyword
‘friend’
• Contoh:
friend void setX( Count &, int );
12
Contoh Program dg Friend Function
#include <iostream.h>
class Count
{ friend void setX( Count &, int );
public:
Count ( ) : x ( 0 )
{ // empty body }
void print() const
{ cout << x << endl; }
private:
int x;
};
void setX( Count &c, int val )
{ c.x = val; // legal: setX is a friend
of Count
}
void main()
{
Count counter;
cout << "counter.x after
instantiation: ";
counter.print();
setX( counter, 8 );
cout << "counter.x after call to
setX friend function: ";
counter.print();
}
13
Operator Overloading
• Pemakaian Overloading operator
ditujukan untuk mengoperasikan data
pada object menjadi mudah
• Menggunakan keyword operator
14
Overloading Arithmatic Operator
Class Buah
{ int apel;
int jeruk;
public:
Buah Buah(int A, int j)
{ apel = A; jeruk = j; }
Buah operator + (Buah b)
{ Buah temp;
temp.apel = apel + b.apel;
temp.jeruk = jeruk + b.jeruk;
return (temp)
}
Buah operator - (Buah b)
};
Buah Buah::operator - (Buah b)
{ Buah temp;
temp.apel = apel - b.apel;
temp.jeruk = jeruk - b.jeruk;
return (temp)
}
void main()
{
Buah B1 (2, 3) , B2 (7, 5), B3 ;
cout << B1.apel << “ dan ”
<< B1.jeruk << “ + “
<< B2.apel << “ dan “
<< B2.jeruk << “ = “;
B3 = B1 + B2 ;
cout << B3.apel << “ dan ”
<< B3.jeruk;
}
15
Operator yg tdk dpt di-overload
Operator
Kegunaan
Contoh
. (dot)
Access ke member class cin.getline
.* (dot asterix)
Pointer ke member class Object.*member
:: (scope)
Akses ke data / member
function
Class::member
?: (ternary)
seleksi kondisi
C=(a>b)?a:b
sizeof
Memperoleh ukuran tipe
data
Sizeof (int)
16
Tugas 6
• Tugas 6A: Mahasiswa membuat ringkasan
tentang friend function dan operator
overloading
• Tugas 6B: Mahasiswa menganalisis
contoh program yang diberikan oleh dosen
• Tugas 6C: Mahasiswa membuat contoh
program dengan menggunakan friend
function dan operator overloading
17