Anda di halaman 1dari 20

BAB XI

PEMROGRAMAN MODULAR

Kegiatan Belajar 11 : Fungsi dalam C++


a. Tujuan
Setelah mempelajari konsep fungsi dalam C++, diharapkan mahasiswa dapat:
1. Menjelaskan konsep fungsi dalam Bahasa C++
2. Membedakan konsep penggunaan fungsi berparameter dengan fungsi non
parameter dalam bahasa C++
3. Mengimplementasikan penggunakan fungsi dalam program sederhana dalam
bahasa pemrograman C++

b. Uraian Materi

1. Definisi Fungsi
Function adalah sebuah struktur, Pengelompokan yang mengandung
sekelompok pernyataan yang akan dilaksanakan oleh CPU jika nama function
tersebut dipanggil untuk dieksekusi, kecuali untuk function utama yaitu int
main() yang akan dieksekusi secara otomatis.

Gambar 11.1 Konsep pemrograman Modular

4
Sebelumnya kita sering meilihat tanpa mengerti int main() pada contoh
program yang pernah diberikan sebelumnya. Pada setiap program pasti
memiliki satu function utama dan merupakan awal dari program berjalan atau
CPU melakukan eksekusi dari sekelompok pernyataan yang diberikan, semua
itu akan di mulai dari function int main(), function tersebut merupakan function
utama yang akan menjadi kepala dari program dimana semua eksekusi
pernyataan berawal. Bisakah anda bayangkan melakukan pemrograman sebuah
program yang sangat-sangat besar dan memerlukan pernyataan yang sangat
panjang, apa lagi jika sebuah proses mempunyai banyak pernyataan dan
dibutuhkan tidak hanya sekali, itu pasti akan membuat anda pusing jika di dunia
ini tidak ada function. Maka, disini Function sangat membantu kita untuk
membuat pengelompokan pernyataan berdasarkan tugas, proses atau katagori.
Ketika kita membutuhkan kelompok pernyataan tersebut kita cukup memanggil
nama function tersebut.

tipe nama (parameter1, parameter2, …){


    Pernyataan
}

Tipe adalah sebuah return type/data type dari Function, function dapat
memiliki nilai di saat akhir hidup dari function dan hal itu disebut pengembalian
nilai. beberapa function dapat mengembalikan nilai hasil operasi yang
dilakukan di dalam function tersebut. tapi juga ada function yang tidak akan
mengembalikan nilai dari operasi di dalam function tersebut, untuk membuat
function tanpa melakukan pengembalian nilai kita bisa menggunakan tipe data
void, jika berniat membuat function yang dapat mengembalikan nilai,
sesuaikanlah tipe data dengan tipe nilai yang akan dikembalikan.

Nama atau identifier, adalah sebuah identitas atau nama dari function
tersebut.

Parameter adalah pemesanan memori untuk menyimpan argumen yang


berisi nilai disaat pemanggilan function. Parameter tersebut akan bersifat lokal

5
bagi function tersebut, tidak bisa digunakan diluar function. Kita bisa membuat
parameter lebih dari satu, dan masing-masing parameter akan dipisah dengan
tanda koma. Kita dapat mengkosongi jika tidak membutuhkan.
Pernyataan adalah tempat dimana pernyataan-pernyataan di tulis. Semua
itu Berada di tengah-tengah { dan }.

2. Dekalarasi Fungsi

Untuk bentuk penulisan sama seperti apa yang pernah kita tulis untuk
membuat function utama int main(), yang berbeda adalah kita bebas memberi
nama function, memberi return type, menambahkan parameter pada function
kustom kita dan function kustom tidak akan dieksekusi oleh CPU jika nama
function buatan tidak dipanggil di dalam function utama.
//Tanpa Parameter
void cetakPesan (){
    cout<<”Belajar Function C++”;
}
//Dengan Parameter
Int tambah (int a, int b){
    return a+b;
}

Pada contoh pertama merupakan contoh yang menunjukan bentuk


function tanpa menggunakan parameter dan tanpa pengembalian nilai. Lalu pada
contoh kedua merupakan contoh menggunakan dua parameter yang dipisahkan
dengan tanda koma ,. pada baris ke satu dari function yang memiliki parameter
terdapat return a+b; akan memberi hasil penjumlahan dari dua parameter a dan b
kepada function sebagai nilai return. sehingga ketika kita memanggil function
itu akan memberikan nilai hasil proses penjumlahan tersebut.
3. Cara mengakses Fungsi
CPU Hanya akan melaksanakan pernyataan-pernyataan yang berada di
dalam function utama int main. Saat mendirikan sebuah function kustom,
pernyataan-pernyataan yang ada di dalam function kustom tidak akan dibaca
oleh CPU jika nama atau identifier pada function yang kita buat tidak dipanggil
di dalam fungsi utama atau dalam function lain yang sudah terjamin CPU akan
melewainya.

6
Jalur pembacaan CPU, CPU akan melaksanakan semua pernyataan yang
dilewati. Ketika CPU itu melewati sebuah pernyataan yang merupakan sebuah
nama dari function maka CPU akan melaksanakan semua pernyataan di dalam
function itu hingga selesai. jika sudah, CPU akan melanjutkan pembacaan
pernyataan pada function sebelumnya. Kita juga bisa membuat function buatan
memanggil function buatan lainya.
Untuk memanggil function, kita cukup menuliskan nama dari function
tersebut dan memberi sepasang tanda ( ), itu merupakan tempat dimana nilai
arguments untuk parameter function tersebut, kita bisa mengkosonginya jika
memang function tersebut tidak membutuhkan argument.
//Function Tanpa Parameter
cetakPesan ();
//Function Dengan Parameter
tambah (argument1, argument2);

//Deklarasi dan Pemanggilan Function


#include <iostream>
using namespace std;
 
int result;
 
void cetakPesan (){
    cout<<"Belajar C++"<<endl<<endl;
}
 
int tambah (int a, int b){
    result = a+b;
    //atau kita bisa menggunakan return
    return a+b;
}
 
int main () {
    cetakPesan();
 
    cout<<"tambah(5,6) = "<<tambah(5,6)<<endl;
    cout<<"result = "<<result<<endl;
 
    return 0;
}

7
Bukan hanya itu saja, Function tersebut juga bisa memanggil function itu
sendiri. Itu sangat membantu saat melakukan rumus matematika, salah satunnya
seperti rumus factorial.

4. Standart Function

Function buatan oleh programmer bisa disebut sebagai function kustom


(Custom Function). Dalam C/C++ juga disediakan function bawaan dari Bahasa
tersebut, dinamakan dengan function standar (Standard Function).
Function standar di dalam suatu Bahasa biasanya dikemas dalam suatu
liblary, seperti printf() dan scanf() yang berada pada header stdio. function-
function standar tersebut memang sudah disediakan dari awal oleh pembuat
bahasa pemrograman untuk mempermudah kita dalam membuat program.

5. Parameter

Parameter adalah tempat penyimpanan (variabel) di dalam function, yang


digunakan untuk melakukan pemeberian data dari pemanggil ke dalam function.
Parameter terletak di antara tanda kurung ( dan ) setelah identitas dari function,
dan sebuah function dapat memiliki beberapa parameter yang dipisahkan
dengan tanda koma , .

Function biasanya membutuhkan data untuk beroperasi, Yang biasa kita lalukan
dalam mendapatkan data adalah dengan memanggil variabel, tapi kita harus
ingat dengan peraturan variabel lokal dalam ruang lingkup. Kita tidak bisa
dengan mudah mendapatkan data dari scope lain.
Hal tersebut merupakan satu alasan kenapa parameter itu ada dalam Bahasa
pemrograman. Jika kita tidak bisa mendapatkan data dari scope lain secara
langsung, kita bisa memberikan data tersebut saat pemanggilan function dengan
perantara yaitu parameter.
Jika kita mempunyai variabel int a dalam function utama dan function kustom
dengan satu parameter int b, ketika kita memberikan nilai dari variabel int a ke
dalam function kustom. Kita dapat menggunakan parameter int b untuk
perantara sekaligus tempat yang akan menjadi variabel local dalam function

8
kustom. apa yang terjadi adalah Data dari int a akan di salin ke variabel int b.
dengan hal itu function kustom kita akan memiliki data dari scope luar (scope
pemanggil). Dan juga data tersebut akan sampai ke tujuan dengan aman.

6. Jenis-jenis parameter

Parameter dalam Bahasa pemrograman biasanya memiliki 2 jenis, yaitu :

a) Function Parameter / Parameter Formal

Function Parameter atau juga disebut sebagai Parameter Formal,


adalah variabel lokal yang didirikan di dalam deklarasi function (bukan
definisi), Yang merupakan tempat penyimpanan nilai dari argument
yang diberikan saat pemanggilan function. Contoh penulisannya secara
umum adalah sebagai berikut:
returnType identitas (Function
Parameters){
//…definisi…
}

Function parameter berada di dalam deklarasi function, di antara tanda


( dan ) setelah identitas dari function. di dalam tanda kurung tersebut
anda bisa membuat banyak parameter, dan masing-masing dipisahkan
dengan tanda koma ,.
int myFunction(int a) { ... }
double myFunction(double a, double b) { … }
void functionNoReturn(int a, char b, double c)
{ … }

b) Argument / Actual Parameter


Argument adalah parameter yang menyertai pemanggilan
function. merupakan tempat dimana anda bisa memberikan data untuk
digunakan di dalam function yang dipanggil dan diberikan saat
pemanggilan function tersebut.
Pemberian data ke dalam function kustom dapat berupa data
langsung, data dari suatu variabel, data dari konstanta, data dari

nama(arguments);
pengembalian function atau merupakan hasil dari operasi. Pemberian
data ke dalam function harus mengikuti aturan yang telah ditetapkan
oleh function parameter. Bentuk penulisannya secara umum adalah
sebagai berikut:

Jika lebih dari 1 argument, masing-masing argument akan


dipisahkan dengan tanda koma. Pemberian arguments harus sesuai
dengan parameter.

myFunction(2) ;
myFuntion(a+b, a+4) ;
myFunction(“Arguments”, ‘A’,
variabel) ;
Contoh programmnya adalah sebagai berikut:

#include <iostream>
using namespace std;
 
void myFunction(int a, int b, int c=20){ // Fuction
Parameter atau Parameter Formal
    cout<<a<<endl;
    cout<<b<<endl;
    cout<<c<<endl;
}
 
int main(){
    myFunction(1,2,3); //Arguments atau Parameter
Actual
    return 0;
}

7. Function Prototype
Function Prototype adalah sebuah pernyataan deklarasi function tanpa
menggunakan badan atau definisi dari function dan di akhiri dengan
semicolon ;. Function prototype berfungsi memberitahukan kepada kompiler
bahwa function tersebut ada.

#include <iostream>
 
int main(){
    std::cout<<welcomeBanner();
    return 0;
}
 
std::string  welcomeBanner(){
    return "belajar C++";
10
}
Mungkin kalian berpikiran bahwa program di atas baik-baik saja. Dan
memproduksi program yang dapat mengeluarkan keluaran berupa string.
Tetapi faktanya bahwa contoh program di atas bahkan tidak bisa
dikompilasi. Karena terdapat kesalahan yang kompiler tidak bisa atasi.
Mungkin keluhan kesalahan pada beberapa kompiler akan berbeda-beda tapi
intinya tetap sama yaitu bahwa kompiler tidak mengenal function dengan
identitas welcomeBanner().
Kita harus mengerti bahwa kompiler membaca kode kita, baris-perbaris
dari atas ke bawah. Alasan dari pesan error tersebut karena penulis menuliskan
program, menggunakan function welcomeBanner() terlebih dahulu sebelum
dibuat. Dan itulah alasan kenapa kompiler tidak mengenal function tersebut.
hanya karena function belum terbuat. Solusi dari permasalahan tersebut cukup
mudah, yaitu memindahkan deklarasi dan definisi function sebelum function
utama int main.
#include <iostream>
 
std::string  welcomeBanner(){
    return "Belajar C++";
}
int main(){
    std::cout<<welcomeBanner();
    return 0;
}

Dengan cara menaruh semua function kustom kita sebelum function


utama akan menyelesaikan permasalahan tersebut. tapi hal tersebut tidak akan
selalu menjadi solusi. Mungkin cara di atas adalah cara yang relative mudah saat
membuat program yang tidak besar. Tapi hal tersebut mungkin akan menjadi
masalah di kedepanya ketika program itu berkembang menjadi besar. Masalah
tersebut adalah akan timbulnya kesulitan pada perawatan program terutama
dalam perawatan function, kemungkinan kita akan susah untuk mamanggil
(menggunakan) function kustom di dalam function kustom kita.

11
Asumsikan bahwa kita memiliki 2 function kustom dengan nama a dan
b. dengan letak menurut urutan alphabet. Dalam kasus tersebut kita masih
dimungkinkan untuk memanggil function kustom a dari function kustom b.
karena function a didirikan sebelum di panggil. Tapi bagaimana jika function a
memanggil b. hal tersebut akan menghasilkan keluhan dari kompiler karena b
digunakan dan belum dibuat. Meskipun kita membalikan tata letak function
dengan urutan b terlebih dahulu. Hal itu sama saja kita membalikan masalah
kita. Dari hal tersebut, bagaimana jika kedua function tersebut saling
memanggil, dalam khasus ini, kita tidak bisa memutuskan function mana yang
harus didirikan dahulu, dan mungkin masalah ini tidak akan pernah berakhir.
Dari semua permasalahan di atas, hal itu dapat merupakan alasan kenapa fitur
function prototype itu ada.
Function prototype adalah pernyataan dari deklarasi function, yang
terdiri dari retun type, identitas, parameter dan tanpa badan dari function
(definisi). Karena merupakan pernyataan maka mendirikan function prototype
harus di akhiri dengan semicolon ;. Bentuk umum penulisannya adalah sebagai
berikut:
tipeReturn identitas(Parameter);

Untuk mendirikan pernyataan tersebut wajib dilakukan sebelum function


utama. Pernyataan Function prototype berfungsi untuk memperkenalkan kepada
kompiler bahwa function tersebut ada. Dan memperbolehkan semua
pemanggilan jika di suatu baris selanjutnya ada baris yang mencoba memanggil
function tersebut. Tugas untuk kompiler hanyalah untuk memperbolehkan dan
melanjutkan kompilasi untuk menemukan definisi dari pernyataan deklarasi
function prototype.
Ketika kita sudah mendirikan function (prototype), kita diwajibkan
membuat definisi function. Untuk bentuk dari function (definisi) sama sekali
tidak ada perubahan meskipun terdapat function prototype (masih akan seperti
mendirikan function seperti biasanya). Hal yang perlu kita perhatikan hanyalah
kesamaan dari deklarasi pada function prototype dan deklarasi pada definisi
function.
Contoh penulisannya adalah sebagai berikut:
//Function prototype
int myFunction(int x, int y);
  12
//Definisi Function
int myFunction(int x,int y){
//..definisi..
}
Untuk tata letaknya definisi function kita dibebaskan meletakan
dimanapun tapi harus tetap mengikuti peraturan yang ada, yaitu kita tidak boleh
meletakanya sebelum function prototype dan pastinya harus berada pada file
yang masih berhubungan. Kebanyakan programmer melakukan definisi dari
function dilakukan setelah function utama. Contoh programnya adalah sebagai
berikut:
#include <iostream>
using namespace std;
 
void cetakPesan();
int tambah(int a, int b);
 
int main () {
    cetakPesan();
    cout<<"tambah(5,6) = "<<tambah(5,6)<<endl;
 
    return 0;
}
void cetakPesan (){
    cout<<"Belajar C++"<<endl<<endl;
}
 
int tambah (int a, int b){
    return a+b;
}
Dalam C/C++ kita dimungkinkan mendirikan function prototype tidak
menggunakan identitas pada parameter yang ada.

int tambah (int a, int b); //dimungkinkan


int tambah (int, int); //dimungkinkan

Function prototype hanya bekerja untuk memperkenalkan deklarasi


function bahwa function itu ada, kepada kompiler. kompiler kanya cukup tau
mengenai tipe return, identitas function, dan urutan tipe data dari parameternya.
Anda bebas memilih menurut selera anda, tapi jika penulis sendiri lebih suka
menggunakan identitas pada parameter, dengan tujuan untuk mempermudah
programmer memahami kode tersebut.

13
8. Pass By Value

Pass by value (memberikan nilai) adalah salah satu metode untuk


memberikan argumen kepada function parameter di saat pemanggilan function.
Pada dasarnya C/C++ memberikan argument kepada funtion parameter dalam
bentuk nilai (value). Ketika kita memberikan argument pada function, maka
nilai dari argument akan di salin ke dalam function parameter.
Dalam menentukan argument kita dapat membuatnya dalam bentuk nilai,
ekspresi, variabel, literal, object, enum dan lain-lain yang mengandung nilai di
dalamnya. Contoh programnya adalah sebagai berikut:
#include <iostream>
using namespace std;
 
int tambah (int a, int b){
    return a+b;
}
int main () {
    cout<<tambah(5,6)<<endl; //pass by value
    return 0;

Function parameter sebenarnya hanyalah variabel lokal. Setiap ketentuan yang


ada pada variabel lokal berlaku pada function parameter. Perbedaanya adalah
hanya pada segi peletakanya. Contoh programnya adalah sebagai berikut:

#include <iostream>
using namespace std;
 
int tambah (int a, int b){
    return a+b;
}
int main () {
    cout<<tambah(5,6)<<endl; //pass by value
    cout<<tambah(19,24)<<endl; //pass by value
    cout<<tambah(79,64)<<endl; //pass by value
 
    return 0;
}

14
Dari program di atas, terlihat bahwa function kustom tambah() dipanggil
berulang kali. Dengan argument yang berbeda-beda. Itu bukan berarti bahwa
nilai function parameter selalu diperbaharui setiap function itu di panggil dan
diberi argument baru, melainkan function parameternya lah yang selalu baru.
Sama seperti variabel lokal, bahwa function parameter termasuk dalam
Automatic duration dengan arti bahwa variabel tersebut hanya akan ada pada
saat function tersebut sedang berjalan. sebelum itu dan sesudah itu, semua local
variabel di dalamnya akan hilang atau tidak ada. Contohnya adalah sebagai
berikut:
#include <iostream>
using namespace std;
 
int ubah(int x){
    x = 99;
    cout<<"x = "<<x<<endl;
}
int main () {
    int a = 1;
 
    cout<<"a = "<<a<<endl;
    ubah(a); //pass by value
    cout<<"a = "<<a<<endl;
 
    return 0;
}

Perubahan pada function parameter tidak akan berpengaruh pada


argument, karena apa yang terjadi adalah function parameter hanya menyalin
nilai dari argument dengan arti lain bahwa argument dan function parameter
adalah variabel yang berbeda dan berdiri sendiri.
Satu hal terakhir yang perlu anda tahu sebelum melakukan metode pass
#include <iostream>
byusing
value namespace
adalah, bahwa
std;metode ini tidak cocok digunakan untuk memberikan
 
argument berupa array, object dan segala sesuatu yang cukup memakan memori
void myFunction(int a,double b,char c);//function
prototype
besar. karena apa yang terjadi adalah nilai dari argument di salin ke function
 
parameter, hal itu dapat menurunkan performa program anda. Contoh
int main(){
    int var=29029;
programnya adalah sebagai berikut:
 
    myFunction(var-29000,2,'A'); //pass by value
    return 0;
}
 
void myFunction(int a,double15b,char c){
    cout<<"a"<<" = "<<a<<endl;
    cout<<"b"<<" = "<<b<<endl;
    cout<<"c"<<" = "<<c<<endl<<endl;
}
9. Pass By Reference

Pass by Reference adalah salah satu metode pemberian argument kepada


function parameter saat pemanggilan function, dengan memanfaatkan reference
pada function parameter. Pada pembuatan function parameter kita
dimungkinkan untuk menggunakan reference. metode ini tidak jauh beda
dengan pass by value, keduanya merupakan metode yang memberikan
argument kepada parameter. Tapi hal yang berbeda di sini adalah bagaimana
function parameter menerima argument tersebut. Contoh programnya adalah
sebagai berikut:

//parameter
void myFunction (int &a,int &b){
}
//pemanggilan
myfunction (argument1,argument2);

pada pass by value kita mengetahuhi sifat dari metode pass by value, yaitu
#include
ketika <iostream>argument kepada function parameter, yang CPU
kita memberikan
using namespace std;
lakukan
  adalah nilai dari variabel argument akan disalin kepada variabel
void myF(int x);//function prototype
function
  paremeter, keduanya akan berdiri sendiri sebagai variabel.
Jadi,int main(){
ketika terjadi perubahan nilai pada function parameter tidak akan
    int a=1;
mempengaruhi
  argument, Nilai pada argument akan selalu aman saat function
    cout<<"a = "<<a<<endl;
tersebut sedang berjalan. Contoh programnya adalah sebagai berikut:
    myF(a);
    cout<<"a = "<<a<<endl;
 
    return 0;
}
  16
void myF(int x){
    x++;
    cout<<"x = "<<x<<endl;
}
tapi hal itu akan berbeda jika kita menggunakan reference pada function
parameter. Reference pada function parameter masih memiliki fungsi yang
sama seperti kita menggunakanya pada variabel biasa. Apa yang terjadi pada
argument adalah cpu akan membuat function parameter sebagai referensi dari
argument, atau dengan arti lain bahwa function parameter akan menjadi alias /
variabel dari memori argument yang deberikan.
Jadi function parameter akan menjadi argument tersebut dengan identitas
berbeda, apapun yang terjadi pada nilai function parameter maka akan
berpengaruh kepada argument tersebut. hal itu terjadi karena function parameter
dan argument memiliki satu memori yang sama. Contoh programnya adalah
sebagai berikut:

#include <iostream>
using namespace std;
 
void myF(int &x);
 
int main(){
    int a=1;
 
    cout<<"a = "<<a<<endl;
    myF(a);
    cout<<"a = "<<a<<endl;
 
    return 0;
}

void myF(int &x){


    x++;
    cout<<"x = "<<x<<endl;
}
17
Untuk membuktikan hal tersebut, kalian bisa melihat pada contoh
program di atas. Semua perubahan nilai pada function parameter &x dari
function kustom myF() akan berpengaruh juga pada argument a pada function
utama int main(). Fungsi dari metode ini biasanya digunakan untuk
mengembalikan nilai. saat kita mengoperasikan sebuah function kustom,
terkadang kita menginginkan function kustom tersebut dapat mengembalikan
nilai yang lebih dari satu. Kadang ini tidak dimungkinkan jika kita
menggunakan keyword return.

Dan metode ini bisa kita gunakan untuk mengatasi permasalahan


tersebut. kita dapat membuat function kustom yang dapat mengembalikan nilai
lebih dari satu. Nilai yang dikembalikan tidak perlu menjadi RValue tapi akan
langsung diberikan kebada argument. Contoh programnya adalah sebagai
berikut:

#include <iostream>
using namespace std;
 
void naik_turun(int &penaikan, int &penurunan, int
nilai, int jumlah);//function prototype
 
int main(){
    int hasilNaik=0, hasilTurun=0, nilai=10;
 
    naik_turun(hasilNaik, hasilTurun, nilai, 3);
    cout<<"hasilNaik = "<<hasilNaik<<endl;
    cout<<"hasilTurun = "<<hasilTurun<<endl;
 
    return 0;
}
 
void naik_turun(int &penaikan, int &penurunan, int
nilai, int jumlah){
    penaikan = nilai + jumlah;
    penurunan = nilai - jumlah;
}
18
Bukan hanya itu saja keuntungan dalam menggunakan metode ini.
Metode pass by reference juga dapat meningkatkan performa program anda,
khususnya saat kita mencoba untuk memberikan variabel yang cukup besar
seperti array, object dan lain-lain. Jika kalian ingin menggunakan pass by
reference untuk menambahkan performa program anda tapi tidak ingin nilai dari
argument dapat di ubah anda dapat mendambahkan fitur konstanta pada
function parameter, dengan itu nilai dari argumen akan tetap aman.
10. Pass By Address

Pass by address kadang juga disebut sebagai Pass by pointer. adalah


salah satu metode untuk memberikan argument kepada function parameter saat
pemanggilan function, dengan memanfaatkan pointer dereference *. Contoh
penulisannya adalah sebagai berikut:

//function parameter
int myFunction (int *par){
}
//function parameter
myFunction(&var);

Function parameter merupakan sebuah variable, hal yang berbeda antara


function parameter dan variabel hanyalah pada penepatanya. Karena function
parameter merupakan variabel, maka saat pembuatan function parameter kita
juga dimungkinkan untuk menggunakan operator dereference, untuk membuat
function parameter berupa variabel pointer.

Pointer merupakan variabel yang dapat menunjuk ke sebuah alamat


memori, atau dalam pengertian lain yaitu, variabel yang memiliki kemampuan
untuk memiliki alamat memori sebagai nilai dari variabel pointer tersebut. dari
variabel pointer kita dimungkinkan untuk mengakses nilai dari alamat memori
yang ditunjuk.

19
Dalam segi pemberian argument kepada function parameter mirip seperti
metode pass by value, ketika kita memberikan argument kepada function
parameter, apa yang terjadi adalah nilai dari argument yang diberikan akan
disalin dan diberikan kepada function parameter.

Tapi ketahui bahwa pointer hanya dapat menyimpan alamat memori


sebagai nilai dari variabel pointer dan, perbedaanya antara pass by value dan
pass by address adalah, nilai yang disalin pada metode pass by address
merupakan alamat memori. Contoh programnya adalah sebagai berikut:
#include <iostream>
using namespace std;
 
void myFunction(int *x)
{
    *x = *x+1;
    cout<<"x = "<<x<<" = "<<*x<<endl;
}
 
int main()
{
    int a=2;
    cout<<"a = "<<&a<<" = "<<a<<endl;
    myFunction(&a);
    cout<<"a = "<<&a<<" = "<<a<<endl;
}

Cara mengoperasikan variabel pointer pada function parameter masih sama


seperti kita mengoperasikan variabel pointer dengan metode Lvalue dan Rvalue.

int *lvalue = &rvalue;

Untuk memberikan nilai yang berupa alamat memoir dari sebuah variabel ke
sebuah variabel pointer, meskipun variabel pointer tersebut merupakan function
parameter, kita tetap akan membutuhkan operator Address-of &.
Pada contoh program di atas kita diperlihatkan kemampuan dari penggunaan
pemberian argument dengan metode pass by address. Pada program di atas
function parameter x memiliki kemampuan dapat mengakses variabel a yang
diberikan sebagai argument, Meskipun variabel tersebut berada pada luar
function.

20
Pada program di atas kita diperlihatkan bahwa function parameter x dapat
mengubah dan melihat nilai dari variabel a yang berada di luar function dan
diakses secara langsung. Berikut adalah contoh program:
#include <iostream>
using namespace std;
 
void cetakArrayInt(int *theArr, int panjang)
{
    //Jika argumen adalah null
    if(!theArr){
        cout<<"Array tidak ditemukan"<<endl;
        return;
    }
 
    //jika array kosong
    if(!panjang){
        cout<<"Array kosong"<<endl;
        return;
    }
    for(int i=0; i<panjang; i++){
        cout<<theArr[i]<<" ";
    }
}
 
int main()
{
    int myArr[]={2, 3, 5, 8, 1};
    cetakArrayInt(myArr, sizeof(myArr)/sizeof(int));
 
    return 0;
}

Setelah penyampain 3 jenis passing value, yaitu pass by value, pass by


reference dan pass by address. Bertujuan untuk memberikan pemahaman, cara-
cara dan metode yang mungkin dapat anda gunakan di masa mendatang. Dari
ketiga metode tersebut masing-masing memiliki kelebihan dan kekurangan. tapi
penulis tidak mencoba untuk menyampaikan perbandingan dan mencari tau
metode yang terbaik untuk digunakan, karena ketiga metode tersebut saling
melengkapi dan masing-masing berguna dalam dalam situasi tertentu. Ketiga
metode tersebut dapat digunakan pada kondisi berikut:

a) Jika akan memberikan argument yang memiliki tipe data dasar, cukup
gunakan Pass by value.

21
b) Jika akan memberikan argument yang merupakan class, struct dan
argument yang cukup memakan banyak memori, gunakan Pass by
reference.

c) Jika akan memberikan argument yang berupa array, gunakan pass by


address atas pass by reference.

d) Jika akan membuat argument yang nilainya tidak bisa diubah, gunakan
pass by value atau anda juga bisa gunakan pass by address dan reference
dengan mengubah function parameter menjadi literal/konstanta.

e) Jika akan membuat nilai dari argument yang diberikan dapat di ubah,
jangan gunakan pass by value.

c. Rangkuman
a. Function adalah sebuah struktur, Pengelompokan yang mengandung
sekelompok pernyataan yang akan dilaksanakan oleh CPU jika nama function
tersebut dipanggil untuk dieksekusi, kecuali untuk function utama yaitu int
main() yang akan dieksekusi secara otomatis.
b. Function prototype adalah pernyataan dari deklarasi function, yang terdiri
dari retun type, identitas, parameter dan tanpa badan dari function (definisi)
c. Parameter adalah tempat penyimpanan (variabel) di dalam function, yang
digunakan untuk melakukan pemeberian data dari pemanggil ke dalam
function. Parameter terletak di antara tanda kurung ( dan ) setelah identitas
dari function
d. Terdapat 2 jenis paramater, yaitu Function parameter dan Argument.

d. Latihan/Tugas
1. Buatlah program beserta analisisnya untuk menghitung luas persegi
panjang dengan menggunakan prinsip modular (multi-function).
Dengan ketentuan sebagai berikut:
a) Input panjang dan lebar
b) Output luas

22
2. Buatlah program untuk menghitung nilai rata-rata dari 10 nilai
dengan menggunakan konsep modular.

3. Buatlah program beserta analisisnya untuk menghitung luas dan


keliling lingkaran dengan menggunakan prinsip modular (multi-
function). Dengan ketentuan sebagai berikut:
a) Konstanta Phi
b) Input jari-jari
c) Output luas dan keliling

23

Anda mungkin juga menyukai