Izin musthofa

Friend Function & Operator Overloading dalam Class Friend Function Friend function adalah fungsi yang di definisikan di luar dari class’s scope namun memiliki hak akses ke semua anggota dari class tersebut. Untuk mendeklarasikan sebuah friend function, kita menggunakan keyword 'friend'. Deklarasikan prototype dari friend function di class yang public. Contoh: friend void setX( Count &, int ); Setelah class selesai, baru kita dapat membuat friend function di bawah class tersebut dan dapat dipanggil di void main untuk mengakses data anggota dalam class. Contoh dalam kodingan program sederhana: Operator Overloading Pemakaian Operator overloading dalam class ditujukan untuk mengoperasikan data pada object menjadi mudah. Untuk bisa menggunakan operator overloading, kita menggunakan keyword 'operator' contoh : friend void operator -(data &a, data &b); Contoh dalam kodingan program sederhana : Tetapi tidak semua operator dapat dibuat menjadi operator overloading, antara lain : 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) Friend pada C++ Friend pada C++ adalah sebuah fungsi atau kelas yang diizinkan mengakses atribut maupun metode satu atau lebih kelas lain nyang menjadi temannya walaupun atribut dan metode yang diakses memiliki izin akses private atau protected. Friend sebenarnya melanggar aturan pemrograman berorientasi objek tentang enkapsulasi dimana izin akses private dan protected tidak sembarang bisa diakses oleh kelas lain, namun tujuan dari adanya friend adalah memudahkan programmer untuk merancang kelas-kelas yang akan dibuat, terutama dalam tahap pengembangan. Penggunaan friend tidak terlalu dianjurkan. FUNGSI / PROSEDUR FRIEND Sebuah friend yang bukan member dari suatu kelas masih dimungkinkan untuk dapat mengakses fungsi dari kelas tersebut walaupun izin aksesnya private maupun protected, asalkan fungsi tersebut dinyatakan sebagai fungsi friend bagi kelas yang bersangkutan. Lebih dari itu, sebuah fungsi dapat menjadi fungsi friend bagi beberapa kelas sekaligus, sehingga dapat mengakses member-member dari kelas-kelas tersebut sekaligus. Untuk dapat menyatakan sebuah fungsi sebagai fungsi friend bagi satu kelas, cukup tambahkan kata kunci friend di depan nama fungsi tersebut di dalam kelas yang bersangkutan. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 // Contoh 1 Fungsi Friend – CRectangle.cpp #include using namespace std; class CPersegi { private: int sisi; public: void setSisi(int s); int luas(); friend CPersegi duplikat(CPersegi persegi1); //fungsi friend }; void CPersegi::setSisi(int s) { this->sisi = s; } int CPersegi::luas() { return this->sisi * this->sisi; } CPersegi duplikat(CPersegi persegi1) { CPersegi persegi2; persegi2.sisi = persegi1.sisi; return (persegi2); } int main() { CPersegi persegiA, persegiB; persegiA.setSisi(3); persegiB = duplikat(persegiA); cout< using namespace std; class CPersegi { private: int sisi; public: void setSisi(int s); int luas(); CPersegi duplikat(); }; void CPersegi::setSisi(int s) { this->sisi = s; } int CPersegi::luas() { return this->sisi * this->sisi; } CPersegi CPersegi::duplikat() { CPersegi persegi2; persegi2.sisi = this->sisi; return (persegi2); } int main() { CPersegi persegiA, persegiB; persegiA.setSisi(3); persegiB = persegiA.duplikat(); cout< using namespace std; class CTitik3D; class CTitik { private: int x,y; public: CTitik(int xi, int yi) //konstruktor { this->x = xi; this->y = yi; } friend void tampilkanTitik(CTitik t1, CTitik3D t2); //fungsi friend }; class CTitik3D : public CTitik { private: int z; public: CTitik3D(int xi, int yi, int zi) //konstruktor { setX(xi); setY(yi); this->z = zi; } friend void tampilkanTitik(CTitik t1, CTitik3D t2); //fungsi friend protected: int getZ() { return this->z; } }; //fungsi friend void tampilkanTitik(CTitik t1, CTitik3D t2) { cout<<"Fungsi Friend"< using namespace std; class YourClass{ friend class YourOtherClass; // Deklarasi kelas Friend private: int topSecret; public: YourClass() : topSecret(0){} void printMember() { cout << topSecret << endl; } }; class YourOtherClass { public: void change( YourClass& yc, int x ){yc.topSecret = x;} }; int main() { YourClass yc1; YourOtherClass yoc1; yc1.printMember(); yoc1.change( yc1, 3 ); yc1.printMember(); return 0; } Ouput : Fitur friend tidak saling silang (terhubung bolak-balik) kecuali jika telah dideklrasikan terlebih secara eksplisit. Pada contoh di atas, kelas YourClass tidak dapat mengakses atribu kelas YourOtherClass. Friend tidak sama dengan inheritance, yang berarti turunan dari kelas YourOtherClass tidak akan bisa mengakses atribut private dan protected kelas YourClass. Friend juga tidak transitif, sehingga kelas yang merupakan friend dari YourOtherClass tidak dapat mengakses anggota pribadi YourClass itu. Gambar berikut menunjukkan deklarasi empat kelas : Base, Derived, aFriend, dan anotherFriend. Hanya kelas aFriend yang memiliki akses langsung ke anggota private Base (dan untuk setiap atribut Base yang mungkin telah diwariskan). Kesimpulan Friend adalah salah satu dari banyaknya fitur yang disediakan oleh bahasa pemrograman C++. Dengan menggunakan friend, kita dapat mengakses atribut kelas lain walau yang private sekalipun. Perlu ditekankan sekali lagi, penggunaan friend tidak terlalu dianjurkan karena dapat mengurangi makna enkapsulasi dari pemrograman berorientasi objek dan dapat menyebabkan masalah pada desain arsitektur keseluruhan. Referensi cplusplus.com. (2013, January 30). Classes (I) – C++ Documentation. Retrieved from cpluspluc.com: http://www.cplusplus.com/doc/tutorial/classes/ cplusplus.com. (2013, January 2013). Friendship and Inheritance – C++ Documentation. Retrieved from cplusplus.com: http://www.cplusplus.com/doc/tutorial/inheritance/ Drs. Megah Mulya, M. (2007). Bahan Ajar Pemrograman Berorientasi Objek. Mirosoft. (2013, January 31). Class Member Functions and Classes as Friends. Retrieved from msdn: http://msdn.microsoft.com/en-US/library/ahhw8bzz(v=vs.80).aspx Rosa A. S., M. Shalahuddin. (2010). Pemrograman Berorientasi Objek dengan Bahasa Pemrograman C++, PHP, dan Java. Bandung: Modula. Wikimedia Foundation, I. (2013, January 31). Friend function. Retrieved from Wikipedia: http://en.wikipedia.org/wiki/Friend_function

Categories:

Leave a Reply