Pengertian FUNGSI
Sebuah fungsi berisi sejumlah pernyataan yang dikemas dalam sebuah nama. Nama ini selanjutnya dapat dipanggil beberapa kali di beberapa tempat dalam program. Tujuan pembuatan fungsi: Mempermudah dalam pengembangan program. Hal ini merupakan kunci dari pemrograman terstruktur. Menghemat ukuran program. Manfaat ini terlihat jika ada beberapa deretan instruksi yang sama digunakan di beberapa tempat di program.
fungsi main() fungsi a() fungsi b() fungsi c() fungsi c1() fungsi c2() fungsi c3()
void main() { ... ... void fungsi(); { ... fungsi(); ... } } 1 2 3 5 6 4 7
#include <iostream.h> void garis() { int i; for(i=1;i<=10;i++) cout<<‘-’; cout<<endl; } void main() { garis(); cout<<“STMIK MDP”; garis(); ---------- STMIK MDP
Prototype fungsi. Selain pembuatan fungsi dengan cara sebelumnya, umumnya program C++ dibuat dalam bentuk prototype fungsi. Prototype ini berupa: nama fungsi tipe nilai balik fungsi jumlah dan tipe parameter dan diakhiri dengan titik-kome (;)
Contoh pendeklarasian prototype: long kuardrat(long l); int maks3(int a,int b,int c); double maks(double x,double y); void garis(); Pada contoh (1), fungsi kuadrat() mempunyai parameter bertipe long dan nilai balik juga berupa long. Pada contoh (2), fungsi maks3() memiliki tiga parameter yang masing-masing bertipe int dan nilai balik juga bertipe int.
Pada contoh (3) fungsi maks() mempunyai dua parameter dan masing-masing bertipe double. Pada contoh (4) fungsi garsi() tidak memiliki parameter dan juga tidak memiliki nilai balik (void).
#include <iostream.h> void garis(); void main() { garis(); cout<<“LATIHAN”; garis(); } void garis() { int i; for(i=1;i<=10;i++) cout<<‘-’; cout<<endl; prototype fungsi garis
Defenisi Fungsi Contoh: long kuadrat(long m) { return (m * m); } nama fungsi tipe parameter parameter menentukan nilai balik tipe nilai balik
Fungsi tanpa nilai balik Ada kalanya diinginkan sebuah fungsi tanpa nilai balik. Hal ini sama seperti prosedur pada bahasa pemrograman Pascal. Untuk hal ini tipe nilai balik sebuah fungsi yang diperlukan adalah void.
Contoh: void judul() { cout<<“LATIHAN \n”; cout<<“PBO \n”; } Pada contoh di atas tidak ada pernyataan return karena fungsi ini tidak mempunyai nilai balik. Pernyataan return masih bisa dipakai dengan bentuk: return;
Lingkup variabel Lingkup variabel menentukan keberadaan suatu variabel dalam fungsi. Ada variabel yang hanya dikenal pada suatu fungsi dan tidak dikenal pada fungsi lainnya. Lingkup variabel yaitu: Variabel otomatis Variabel eksternal Variabel statis
Variabel Otomatis Variabel yang didefenisikan di dalam suatu fungsi berlaku sebagai variabel lokal. Artinya variabel tersebut hanya dikenal di dalam fungsi tempat variabel didefenisikan.
#include <iostream.h> #include <conio.h> void alpha(); // prototipe fungsi void main() { int x = 22; double y = 2.22; cout<<“Pada main() x = “<<x<<“ y = “<<y; alpha(); // panggil fungsi alpha() } void alpha() { int x = 20; double y = 3.14; cout<<“Pada alpha() x = “<<x<<“ y = “<<y;
Variabel Eksternal Variabel eksternal merupakan kebalikan dari variabel otomatis. Variabel eksternal adalah variabel yang didefenisikan di luar fungsi manapun. Variabel ini dikenal juga dengan variabel global, karena dikenal oleh semua fungsi.
#include <iostream.h> #include <conio.h> int x = 550; void tambah(); // prototipe fungsi void main() { cout<<x<<endl; tambah(); cout<<x<<endl; } void tambah() { x++
Variabel Statis Baik variabel eksternal maupun variabel otomatis dapat berkedudukan sebagai variabel statis. Suatu variabel statis mempunyai sifat: Jika variabel otomatis berdiri sebagai variabel statis, maka: Variabel tetap hanya dapat diakses pada fungsi yang mendefenisikannya. Variabel tidak hilang saat eksekusi fungsi berakhir. Nilainya akan tetap dipertahankan, sehingga akan dikenali pada pemanggilan fungsi tahap berikutnya. Inisialisai oleh program akan dikenali sekali saja selama program dijalankan. Jika tidak ada inisialisai secara eksplisit, variabel diisi dengan nol.
Jika variabel eksternal dijadikan sebagai variabel statis, variabel ini dapat diakses oleh semua file yang didefenisikan pada file yang sama dengan variabel eksternal tersebut Variabel statis diperoleh dengan menambahkan kata-kata static di depan tipe data variabel. static int waterloo; void abba() { ... static int mania; ... }
Operator Resolusi Lingkup Pada C++ terdapat operator resolusi lingkup berupa dua buah tanda titik-dua (::). Kegunaannya adalah untuk mengakses variabel yang didefenisikan di luar fungsi. Hal ini diperlukan jika di dalam suatu fungsi yang hendak mengakses variabel tersebut terdapat variabel lokal dengan nama yang sama.
5.6789 50 5.6789 77 #include <iostream.h> #include <conio.h> int x = 50; // variabel eksternal void main() { double x; // variabel lokal x = 5.678901234; cout<< x <<“ “<< ::x <<endl; ::x = 77; } 5.6789 50 5.6789 77
Program tersebut memperlihatkan bahwa sekalipun dalam suatu fungsi terdapat variabel yang sama namanya dengan variabel eksternal, kedua variabel tersebut tetap dapat diakses.
Nilai Bawaan untuk Parameter Fungsi Salah satu keistimewaan C++ adalah adanya kemampuan untuk menyetel nilai bawaan. Dengan kemampuan tersebut, sebuah fungsi dapat dipanggil tanpa menyertakan parameternya walaupun dalam pendekalarasin fungsinya memiliki parameter. Perhatikan contoh berikut:
Jika ingin menampilkan 10 kali C++ maka ditulis: tulis(10); void tulis(int jum) { for (int i = 0; i < jum;i++) cout<<“C++”<<endl; cout<<“Selesai”; } Fungsi di atas akan menampilkan tulisan C++ sebanyak parameter jum yang disertakan waktu memanggil fungsi. Jika ingin menampilkan 10 kali C++ maka ditulis: tulis(10); Jika ingin menampilkan 1 tulisan C++ maka ditulis: tulis(1);
#include <iostream.h> #include <conio.h> void tulis(int jum); void main() { tulis(); // letak kesalahan } void tulis(int jum) { for (int i = 0; i < jum;i++) cout<<“C++”<<endl; cout<<“Selesai”; Perogram di atas terdapat kesalahan karena adanya pemanggilan fungsi yang salah. Seharusnya pemanggilan fungsi menyertakan sebuah nilai parameter.
Untuk menghindari hal itu, parameter fungsi dapat diatur dengan memberiakn nilai bawaan terhadap parameter. Caranya adalah dengan merubah bentuk prototipe dari fungsi menjadi sebagai berikut: void tulis(int jum = 1); Perubahan hanya dilakukan terhadap prototipe, untuk mendeklarasian fungsi tidak dilakukan perubahan. Perhatikan contoh berikut:
#include <iostream.h> #include <conio.h> void tulis(int jum = 1); void main() { tulis(); } void tulis(int jum) { for (int i = 0; i < jum;i++) cout<<“C++”<<endl; cout<<“Selesai”; Pemanggilan tulis(); diperlakuakan sama dengan tulis(1);
Referensi Pada C++ referensi digunakan untuk memberikan nama alias dari variabel. Bentuk pendeklarasiannya: type &ref = variabel; Contoh : int &r = i; Perubahan terhadap nilai i juga akan merubah nilai r, begitu juga sebaliknya, perubahan terhadap nilai r akan berpengaruh terhadap nilai i.
#include <iostream.h> #include <conio.h> void main() { int i; int &x = i; // deklarasi referensi i = 10; cout<<“i = “<< i << endl; cout<<“x = “<< x << endl; r = 55; } i = 10 x = 10 i = 55 x = 55
Inline Function Untuk membuat program yang terstruktur diperlukan adanya fungsi. Tapi akan membuat program lebih lambat karena data pada fungsi harus diletakkan pada stack dan setelah fungsi selesai dijalankan, maka stack tersebut harus dikosongkan kembali. Hal inilah yang memperlambat proses program. Masalah tersebut dapat diatasi dengan inline function. Sebuah inline function dibentuk dengan cukup menambahkan kata-kata inline di depan tipe nilai balik fungsi.
Contoh penulisan: inline int jumlah(int x, int y) { return (x + y); } Inline disarangkan dipakai pada fungsi yang sering dipakai dan ukurannya kecil (satu atau dua perintah), terutama jika dilibatkan dalam perulangan.
#include <iostream.h> #include <conio.h> inline int jumlah(int x, int y); void main() { clrscr(); for (int i=1;i<100;i++) cout<<i<<“. “<<jumlah(i,2*i)<<endl; } 3 6 9 12 15 18 ...
Fungsi Overloading Fungsi overloading merupakan kemampuan C++ yang memungkinkan sebuah fungsi dapat menerima bermacam-macam tipe dan memberikan nilai balik yang bervariasi juga. Contoh berikut adalah tiga buah fungsi yang overloading.
int kuadrat(int i) { return (i * i); } long kuadrat(long l) { return (l * l); double kuadrat(double d) { return (d * d);
Kemudian C++ dapat memilih fungsi yang tepat dengan memeriksa tipe parameter. Jadi jika ada pemanggilan fungsi kuadrat() sebagai berikut: x = kuadrat(7.1); maka C++ akan memilih fungsi: double kuadrat(double d) { return (d * d); }
#include <iostream.h> #include <conio.h> int kuadrat(int i); long kuadrat(long l); double kuadrat(double d); void main() { cout<< kuadrat(2) <<andl; cout<< kuadrat(66666) <<endl; cout<< kuadrat(1.2) <<endl; } int kuadrat(int i) { return (i * i); long kuadrat(long l) { return (l * l); double kuadrat(double d) { return (d * d);
5 5 a #include <iostream.h> #include <conio.h> void tampil(int i); void tampil(int i,char x); void main() { tampil(5); tampil(5,’a’); } { cout << i <<endl; { cout<< i <<“ “<< x <<endl; 5 5 a