Basic Cpp: C/C++ Function

C++ Functions

Function adalah kumpulan dari kode/statement yang mempunyai tugas tertentu.

Syntax:

return_type function_name(arg_type_1 arg_1, arg_type_2 arg_2, ...) {
    ...
    ...
    ...
    [if return_type is non void]
        return something of type `return_type`;
}

 

Function yang sudah build-in di C++ disebut Library Function, sedangkan yang dibuat oleh programmer disebut User-defined Function.

Library Function:

Untuk menggunakan library function harus disertakan header file dari library dan diletakan diawal program. contoh: #include <iostream>

User-Defined Function:

Contoh:

Penjumlahan dua variabel

#include <iostream>
using namespace std;

// Function prototype (declaration)
int add(int, int);

int main()
{
    int num1, num2, sum;
    cout<<"Enters two numbers to add: ";
    cin >> num1 >> num2;

    // Function call
    sum = add(num1, num2);
    cout << "Sum = " << sum;
    return 0;
}

// Function definition
int add(int a, int b)
{
    int add;
    add = a + b;

    // Return statement
    return add;
}

Output:

Enters two integers: 8
-4
Sum = 4

Ada 3 Hal yang harus diperhatikan dalam membuat function:

1. Function declaration/Function Prototype

2. Function definition

3. Function Call

Function declaration, perbedaan antara function declaration and function definition mirip dengan data declaration dan definition, Declaration hanya menentukan nama dari function dan character function tetapi tidak mengalokasikan storage.

Function definition , adalah function yang dibuat oleh programmer (body function). Function definition terdiri dari function declaration dan function body.

Function Call, berfungsi untuk memanggil function yang kita buat dan terdapat di main()

Parameter Passing Argument To Functions

Argument mengacu pada data yang di passing ke function (function declaration) pada saat function call.

Argument apa saja yang bisa dipassing ke functions? …

Contoh:

Yang Harus diperhatikan dalam Passing Argument:

1. Jumlah actual parameter dan formal parameter harus sama, (kecuali function overloading)

2. type data antara actual parameter dan formal parameter harus match.

3. kita bisa membuat default value untuk argument, tujuan dari default value adalah jika kita tidak memberi nilai, maka default value inilah yang akan dijalankan

// C++ Program to demonstrate working of default argument

#include <iostream>
using namespace std;

void display(char = '*', int = 1);

int main()
{
    cout << "No argument passed:\n";
    display();
    
    cout << "\nFirst argument passed:\n";
    display('#');
    
    cout << "\nBoth argument passed:\n";
    display('$', 5);

    return 0;
}

void display(char c, int n)
{
    for(int i = 1; i <= n; ++i)
    {
        cout << c;
    }
    cout << endl;
}

Output

No argument passed:
*

First argument passed:
#

Both argument passed:
$$$$$

Tipe-Tipe C++ Function

1. Function tanpa argument dan tanpa return value

2. Function tanpa argument tetapi dengan return value

3. Function dengan argument dan tanpa return value

4. Function dengan argument dan dengan return value

Function tanpa argument dan tanpa return value

# include <iostream>
using namespace std;

void prime();

int main()
{
    // No argument is passed to prime()
    prime();
    return 0;
}


// Return type of function is void because value is not returned.
void prime()
{

    int num, i, flag = 0;

    cout << "Enter a positive integer enter to check: ";
    cin >> num;

    for(i = 2; i <= num/2; ++i)
    {
        if(num % i == 0)
        {
            flag = 1; 
            break;
        }
    }

    if (flag == 1)
    {
        cout << num << " is not a prime number.";
    }
    else
    {
        cout << num << " is a prime number.";
    }
}

Function tanpa argument tetapi dengan return value

#include <iostream>
using namespace std;

int prime();

int main()
{
    int num, i, flag = 0;

    // No argument is passed to prime()
    num = prime();
    for (i = 2; i <= num/2; ++i)
    {
        if (num%i == 0)
        {
            flag = 1;
            break;
        }
    }

    if (flag == 1)
    {
        cout<<num<<" is not a prime number.";
    }
    else
    {
        cout<<num<<" is a prime number.";
    }
    return 0;
}

// Return type of function is int
int prime()
{
    int n;

    printf("Enter a positive integer to check: ");
    cin >> n;

    return n;
}

Function dengan argument dan tanpa return value

#include <iostream>
using namespace std;

void prime(int n);

int main()
{
    int num;
    cout << "Enter a positive integer to check: ";
    cin >> num;
    
    // Argument num is passed to the function prime()
    prime(num);
    return 0;
}

// There is no return value to calling function. Hence, return type of function is void. */
void prime(int n)
{
    int i, flag = 0;
    for (i = 2; i <= n/2; ++i)
    {
        if (n%i == 0)
        {
            flag = 1;
            break;
        }
    }

    if (flag == 1)
    {
        cout << n << " is not a prime number.";
    }
    else {
        cout << n << " is a prime number.";
    }
}

Function dengan argument dan dengan return value

#include <iostream>
using namespace std;

int prime(int n);

int main()
{
    int num, flag = 0;
    cout << "Enter positive integer to check: ";
    cin >> num;

    // Argument num is passed to check() function
    flag = prime(num);

    if(flag == 1)
        cout << num << " is not a prime number.";
    else
        cout<< num << " is a prime number.";
    return 0;
}

/* This function returns integer value.  */
int prime(int n)
{
    int i;
    for(i = 2; i <= n/2; ++i)
    {
        if(n % i == 0)
            return 1;
    }

    return 0;
}

Pilih yang mana dari 4 type tersebut? tergantung kebutuhan.

Methods Passing Parameter

1. Pass By Value

 

 

2. Pass By Reference

3. Pass By Pointer

C++ Function Overlading

beberapa function yang memiliki nama yang sama tetapi berbeda arguments.

#include <iostream>
using namespace std;

void display(int);
void display(float);
void display(int, float);

int main() {

    int a = 5;
    float b = 5.5;

    display(a);
    display(b);
    display(a, b);

    return 0;
}

void display(int var) {
    cout << "Integer number: " << var << endl;
}

void display(float var) {
    cout << "Float number: " << var << endl;
}

void display(int var1, float var2) {
    cout << "Integer number: " << var1;
    cout << " and float number:" << var2;
}

Output:

Integer number: 5
Float number: 5.5
Integer number: 5 and float number: 5.5

Contoh lain:

// Program to compute absolute value
// Works both for integer and float

#include <iostream>
using namespace std;

int absolute(int);
float absolute(float);

int main() {
    int a = -5;
    float b = 5.5;
    
    cout << "Absolute value of " << a << " = " << absolute(a) << endl;
    cout << "Absolute value of " << b << " = " << absolute(b);
    return 0;
}

int absolute(int var) {
     if (var < 0)
         var = -var;
    return var;
}

float absolute(float var){
    if (var < 0.0)
        var = -var;
    return var;
}

Output:

Absolute value of -5 = 5
Absolute value of 5.5 = 5.5

C++ Storage Class

Setiap variable di C++ mempunyai dua feature: type dan storage class

1. type: adalah type data

2. storage class: lifetime (berapa lama variabel bisa exist) dan scope (daerah mana program dapat mengakses variable tersebut).

1. Local variabel

2. global variabel

3. static local variabel

4. register variabel

5. thread local storage

 

Local variabel, didefine di dalam functions, yang dapat diakses di dalam functions

#include <iostream>
using namespace std;

void test();

int main() 
{
    // local variable to main()
    int var = 5;

    test();
    
    // illegal: var1 not declared inside main()
    var1 = 9;
}

void test()
{
    // local variable to test()
    int var1;
    var1 = 6;

    // illegal: var not declared inside test()
    cout << var;
}

But, after C++11 auto has a different meaning and should not be used for defining local variables.

 

global variabel, didefine diluar semua function, akan berakhir setelah program ditutup, diletakan di luar main()

#include <iostream>
using namespace std;

// Global variable declaration
int c = 12;

void test();

int main()
{
    ++c;

    // Outputs 13
    cout << c <<endl;
    test();

    return 0;
}

void test()
{
    ++c;

    // Outputs 14
    cout << c;
}

Output:

13
14

static local variabel

sama dengan local variabel, hanya eksis di function dimana variabel static tersebut didelcare, tetapi value dari static masih tersimpan sampai program ditutup.

... .. ...
int main()
{
   static float a;
   ... .. ...
}

 

#include <iostream>
using namespace std;

void test()
{
    // var is a static variable
    static int var = 0;
    ++var;

    cout << var << endl;
}

int main()
{
    
    test();
    test();

    return 0;
}

Output

1
2

In the above program, test() function is invoked 2 times.

During the first call, variable var is declared as static variable and initialized to 0. Then 1 is added to var which is displayed in the screen.

When the function test() returns, variable var still exists because it is a static variable.

During second function call, no new variable var is created. The same var is increased by 1 and then displayed to the screen.

Output of above program if var was not specified as static variable

1
1

register variabel

Keyword register is used for specifying register variables.

thread local storage

Keyword thread_local is used for this purpose.

C++ Recursion

Function yang memanggil dirinya sendiri.

The recursion continues until some condition is met.

To prevent infinite recursion, if…else statement (or similar approach) can be used where one branch makes the recursive call and other doesn’t.

ContohL factorial,

Faktorial adalah perkalian antara bilangan bulat positif (bilangan asli) yang kurang dari atau sama dengan n. Faktorial ditulis sebagai n! dan disebut n faktorial. Secara umum dapat dituliskan sebagai:

n! = n(n – 1) . (n – 2) . (n – 3) .   . . .3.2.1

0! = 1 dan 1! = 1

Contoh :

3!  = 3 . (3 – 1) . (3 – 2)    = 3 . 2. 1 = 6

5! = 5 . (5 – 1) . (5 – 2) . (5 – 3) . (5 – 4) = 5 . 4 . 3 . 2 . 1 = 120

// Factorial of n = 1*2*3*...*n

#include <iostream>
using namespace std;

int factorial(int);

int main() 
{
    int n;
    cout<<"Enter a number to find factorial: ";
    cin >> n;
    cout << "Factorial of " << n <<" = " << factorial(n);
    return 0;
}

int factorial(int n) 
{
    if (n > 1) 
    {
        return n*factorial(n-1);
    }
    else 
    {
        return 1;
    }
}

Output

Enter a number to find factorial: 4
Factorial of 4 = 24

Return Type

Return Type by Value

Function dapat mereturn/mengembalikan nilai ke function call dengan syntax:

return add;

Note: data type untuk variabel yang direturn harus sama dengan yang function caller.

Return Type by Reference

#include <iostream>
using namespace std;

// Global variable
int num;

// Function declaration
int& test();

int main()
{
    test() = 5;

    cout << num;

    return 0;
}

int& test()
{
    return num;
}

Output

5

In program above, the return type of function test() is int&. Hence, this function returns a reference of the variable num.

The return statement is return num;. Unlike return by value, this statement doesn’t return value of num, instead it returns the variable itself (address).

So, when the variable is returned, it can be assigned a value as done in test() = 5;

This stores 5 to the variable num, which is displayed onto the screen.

Important Things to Remember When Returning by Reference.

  • Ordinary function returns value but this function doesn’t. Hence, you cannot return a constant from the function.
    int& test() {
        return 2;
    }
  • You cannot return a local variable from this function.
    int& test()
    {
        int n = 2; 
        return n; 
    }

Pass by Value vs Pass by Reference

Pass by Value: perubahan di dalam function tidak berefek pada nilai di actual parameter di caller sedangkan pass by reference, akan ikut berubah.

Di C, selalu menggunakan passed by value, untuk menggunakan pass by reference, dapat menggunakan pointer

#include <stdio.h> 
void fun(int x) 
{ 
x = 30; 
}

int main(void) 
{ 
int x = 20; 
fun(x); 
printf("x = %d", x); 
return 0; 
} 


//Output: x=20

Dengan menggunakan pointer:

# include <stdio.h> 
void fun(int *ptr) 
{ 
*ptr = 30; 
}

int main() 
{ 
int x = 20; 
fun(&x); 
printf("x = %d", x);

return 0; 
} 


//Output: x=30

Summary Function:

1. Setiap program C mempunyai function main(), ini akan dipanggil oleh operating system ketika user menjalankan program

2. Gunakan void, jika function tidak memiliki return type

void function name(int a) 
{ 
....... //Function Body 
return; //Function execution would get terminated 
}

3. Semua return type di C diperbolehkan kecuali arrays dan functions, dapat menggunakan pointer to array atau pointer to functions.

4. Jika tidak ada parameter, di C gunakan void fun(void) karena jika tidak menggunakan parameter void, akan bisa dipanggil dengan sembarang parameter, sedangkan di C++, tidak bisa. void fun() dan void fun(void) adalah sama.

 

Leave a Reply

Your email address will not be published. Required fields are marked *