Jumat, 04 Mei 2012

Konstanta and Friends dalam programming

Konstanta and Friend Obejct Programming

Konstanta

Seperti yang sudah kita ketahui pengertian dari konstanta itu sendiri adalah nilai numeris/karakter yang tetap atau tidak beruah.
dan dalam hal ini kita akan sama - sama belajar tentang constant dalam object.

Object constant digunakan untuk object yang tidak dapat di-modify , Jika di-modify akan menyebabkan Compiler error .
Contoh object konstant:
const Time noon( 15, 0, 0 );

deklarasi konstanta object noon dari class Time yg di-inisial 15
Member Function constant


Member function utk const objects juga harus dibuat const
Tidak bisa me-modify object
const pada prototype dan definisinya:

int getHari() const; // Prototype

int Time::getHari() const // Definisi
{ return hari; }

Constructor dan Destructor tidak boleh di buat const Karena harus dapat me-modify object
Constructor = utk initialsasi objects
Destructor = utk termination object


Sintaks Initializer Member Class
Initialisasi dg sintaks initializer member dapat digunakan untuk semua const data member.




Friend Function


in C++ friend functions adalah fungsi khusus yang dapat mengakses anggota private dari kelas. Mereka dianggap sebagai jalan keluar dalam konsep Pemrograman Berorientasi Objek, namun penggunaannya logis dari mereka dapat membuat mereka berguna dalam kasus-kasus tertentu. Misalnya: jika tidak mungkin untuk menerapkan beberapa fungsi, tanpa membuat anggota pribadi dapat diakses di dalamnya. Situasi ini muncul terutama dalam kasus overloading operator.

Pada contoh berikut, cetak fungsi teman adalah anggota kelas DUA dan mengakses data pribadi anggota a dan b dari kelas SATU.



#include <iostream>
using namespace std;

//Must be known to TWO
//before declaration of ONE.
class ONE;

class TWO
{
public:
  void print(ONE& x);
};

class ONE
{
  int a, b;
  friend void TWO::print(ONE& x);
public:
  ONE() : a(1), b(2) { }
};

void TWO::print(ONE& x)
{
  cout << "a is " << x.a << endl;
  cout << "b is " << x.b << endl;
}

int main()
{
  ONE xobj;
  TWO yobj;
  yobj.print(xobj);
} 

Friend function memiliki sifat sebagai berikut :
  1. Friend dapat menjadi anggota beberapa kelas lainnya. 
  2. Friend bisa menjadi friend dari kelas lain atau semua kelas dalam satu program, seperti teman dikenal sebagai friend global. 
  3. Friend dapat mengakses anggota pribadi atau dilindungi dari kelas di mana mereka menyatakan untuk menjadi friend, tetapi mereka dapat menggunakan anggota untuk objek tertentu. 
  4. Friend adalah non-anggota maka tidak mendapatkan "ini" pointer. 
  5. Friend, bisa menjadi friend lebih dari satu kelas, maka mereka dapat digunakan untuk pesan lewat antara kelas. 
  6. Friend dapat dideklarasikan di mana saja (di bagian publik, dilindungi atau swasta) di kelas.
Friend Class

Class juga dapat dinyatakan sebagai  friend dari beberapa kelas yang lain. Ketika kita membuat friend maka class semua fungsi anggota dari friend class juga menjadi friend dari class lain. Hal ini memerlukan kondisi bahwa class menjadi friend pertama harus dinyatakan atau didefinisikan.

deklarasi friend class :

#include <iostream>
using namespace std;

class MyClass
{
 // Declare a friend class
 friend class SecondClass;

 public:
  MyClass() : Secret(0){}
  void printMember()
  {
   cout << Secret << endl;
  }
 private:
  int Secret;
};

class SecondClass
{
 public:
  void change( MyClass& yourclass, int x )
  {
   yourclass.Secret = x;
  }
};

void main()
{
 MyClass my_class;
 SecondClass sec_class;
 my_class.printMember();
 sec_class.change( my_class, 5 );
 my_class.printMember();
}