SIDE

Jumat, 25 September 2009

Tugas 3 tentang Overloading

Operator overloading
Operator overloading memungkinkan Anda untuk membuat operator standar, seperti +, -, * dan seterusnya, bekerja dengan objek dari tipe data Anda sendiri. Hal ini memungkinkan Anda untuk menulis fungsi yang mengubah operator tertentu sehingga melakukan tindakan tertentu ketika digunakan dengan objek dari suatu kelas. Misalnya, Anda bisa mendefinisikan ulang operator> agar, ketika digunakan dengan objek dari kelas Box (yang kita lihat sebelumnya), akan mengembalikan true jika argumen Kotak pertama memiliki volume yang lebih besar daripada yang kedua.

Operator overloading tidak mengijinkan anda untuk menemukan operator baru, Anda juga tidak bisa mengubah didahulukan dari operator, sehingga versi overload operator akan memiliki prioritas yang sama dalam urutan mengevaluasi sebuah ekspresi sebagai operator dasar asli.

Meskipun Anda tidak dapat membebani semua operator, pembatasan tidak terlalu menekan. Ini adalah operator yang tidak dapat Anda overload:

Resolusi lingkup operator,::

Operator kondisional,?:

Seleksi anggota langsung operator,.

Ukuran-of operator, sizeof

Dereferensi pointer ke anggota kelas operator, .*
Ada lagi permainan adil, yang memberi Anda cukup sedikit lingkup. Jelas, itu ide yang baik untuk memastikan bahwa versi dari operator standar biasanya cukup konsisten dengan penggunaan normal, atau setidaknya cukup intuitif dalam operasi mereka. Tidak akan pendekatan yang sangat masuk akal untuk menghasilkan kelebihan beban + operator yang dilakukan setara dengan mengalikan pada objek kelas. Cara terbaik untuk memahami bagaimana operator overloading bekerja adalah bekerja melalui sebuah contoh, jadi mari kita menerapkan apa yang kita hanya menyebut, yang lebih besar dari operator,>, untuk kelas Box.

Operator menerapkan overloaded
Jika kita ingin menerapkan overload operator untuk kelas, kita harus menulis fungsi khusus. Dengan asumsi bahwa itu adalah anggota kelas Box, prototipe untuk fungsi untuk membebani> operator akan menjadi sebagai berikut:

int operator> (Kotak & aBox); / / overload 'lebih besar dari'

Kata operator di sini adalah kata kunci. Dikombinasikan dengan operator, dalam hal ini,>, ia mendefinisikan fungsi operator. Nama fungsi dalam hal ini adalah operator> (). Anda dapat menulis fungsi operator dengan atau tanpa spasi di antara kata kunci operator dan operator itu sendiri, asalkan tidak ada ambiguitas. Ambiguitas muncul dengan operator yang menggunakan huruf yang normal seperti baru atau hapus. Jika mereka ditulis tanpa spasi, operatornew () atau operatordelete (), mereka adalah nama-nama hukum untuk fungsi biasa, sehingga untuk fungsi operator dengan operator ini, Anda harus meninggalkan ruang antara operator kata kunci dan operator itu sendiri.

Method overloading à beberapa method dengan nama yang sama dalam suatu kelas tertentu.

Syarat :

Berbeda dalam jumlah parameter.

Berbeda dalam tipe ataupun posisi parameter

Overloading Method

Yang dimaksud dengan Overloading Method adalah kita boleh mendeklarasikan nama method yang sama di dalam sebuah class, namun harus diperhatikan walaupun nama method boleh sama, tetapi daftar parameter yang dilewatkan haruslah berbeda.

Contoh dibawah ini akan memberikan gambaran tentang Overloading Method :

class Manusia {

String nama;

int usia;

void cetak(String namaManusia) { // method yang akan di-overload

nama = namaManusia;

System.out.println(“Nama : “ + nama);

}

void cetak(int usiaManusia) { // overloading method cetak

usia = usiaManusia;

System.out.println(“Usia : “ + usiaManusia);

}

}

Contoh source code :

#include

using namespace std;

class Box // Class definition at global scope

{

public:

// Constructor definition

Box(double lv=1.0, double bv=1.0, double hv=1.0)

{

cout <<>

length = lv; // Set values of

breadth = bv; // data members

height = hv;

}

// Function to calculate the volume of a box

double Volume() const

{

return length * breadth * height;

}

// Overloaded 'greater than'

bool operator>(const Box& aBox) const;

// Destructor definition

~Box()

{ cout << "Destructor called." <<>

private:

double length; // Length of a box in inches

double breadth; // Breadth of a box in inches

double height; // Height of a box in inches

};

// Operator function for 'greater than' which

// compares volumes of Box objects.

bool Box::operator>(const Box& aBox) const

{

return (this->Volume()) > (aBox.Volume());

}

int main()

{

Box SmallBox(4.0, 2.0, 1.0);

Box MediumBox(10.0, 4.0, 2.0);

Box BigBox(30.0, 20.0, 40.0);

if(MediumBox > SmallBox)

cout <<>

<< "MediumBox is Bigger than SmallBox";

if(MediumBox > BigBox)

cout <<>

<< "MediumBox is Bigger than BigBox";

else

cout <<>

<< "MediumBox is not Bigger than BigBox";

cout <<>

return 0;

}


Output :


0 komentar:

Posting Komentar

 
© 2011 PENGETAHUAN BUKAN BATASAN IMAJINASI | Except as noted, this content is licensed under Creative Commons Attribution 2.5.
For details and restrictions, see the Content License | Recode by Ardhiansyam | Based on Android Developers Blog