Functions

Function Definition

int add(int a, int b) {
    return a + b;
}

double calculateArea(double radius) {
    const double PI = 3.14159;
    return PI * radius * radius;
}

bool isPrime(int number) {
    if (number <= 1) return false;
    if (number <= 3) return true;
    if (number % 2 == 0 || number % 3 == 0) return false;
    
    for (int i = 5; i * i <= number; i += 6) {
        if (number % i == 0 || number % (i + 2) == 0) {
            return false;
        }
    }
    return true;
}

Function Call Demo

Function Declaration and Definition

#include <iostream>

// Function declaration (prototype)
int multiply(int a, int b);
void printMessage(std::string message);

int main() {
    int result = multiply(5, 3);
    std::cout << "Result: " << result << std::endl;
    
    printMessage("Hello from function!");
    return 0;
}

// Function definition
int multiply(int a, int b) {
    return a * b;
}

void printMessage(std::string message) {
    std::cout << message << std::endl;
}

Function Parameters

#include <iostream>
#include <string>

// Function with default parameters
void greet(std::string name = "User", int times = 1) {
    for (int i = 0; i < times; i++) {
        std::cout << "Hello, " << name << "!" << std::endl;
    }
}

// Function with reference parameters
void swap(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
}

int main() {
    greet();                    // Uses defaults
    greet("Alice");            // Custom name, default times
    greet("Bob", 3);           // Custom name and times
    
    int x = 5, y = 10;
    std::cout << "Before: x=" << x << ", y=" << y << std::endl;
    swap(x, y);
    std::cout << "After: x=" << x << ", y=" << y << std::endl;
    
    return 0;
}

Function Overloading

#include <iostream>
#include <string>

// Overloaded functions with same name but different parameters
int add(int a, int b) {
    return a + b;
}

double add(double a, double b) {
    return a + b;
}

std::string add(std::string a, std::string b) {
    return a + " " + b;
}

int add(int a, int b, int c) {
    return a + b + c;
}

int main() {
    std::cout << "add(5, 3) = " << add(5, 3) << std::endl;
    std::cout << "add(3.14, 2.86) = " << add(3.14, 2.86) << std::endl;
    std::cout << "add(\"Hello\", \"World\") = " << add("Hello", "World") << std::endl;
    std::cout << "add(1, 2, 3) = " << add(1, 2, 3) << std::endl;
    
    return 0;
}

Recursive Functions

#include <iostream>

// Recursive factorial function
int factorial(int n) {
    if (n <= 1) {
        return 1;
    }
    return n * factorial(n - 1);
}

// Recursive Fibonacci function
int fibonacci(int n) {
    if (n <= 1) {
        return n;
    }
    return fibonacci(n - 1) + fibonacci(n - 2);
}

// Recursive GCD function
int gcd(int a, int b) {
    if (b == 0) {
        return a;
    }
    return gcd(b, a % b);
}

int main() {
    std::cout << "Factorial of 5: " << factorial(5) << std::endl;
    std::cout << "Fibonacci(8): " << fibonacci(8) << std::endl;
    std::cout << "GCD of 48 and 18: " << gcd(48, 18) << std::endl;
    
    return 0;
}

Inline Functions

#include <iostream>

// Inline function for simple operations
inline int square(int x) {
    return x * x;
}

inline int cube(int x) {
    return x * x * x;
}

inline bool isEven(int x) {
    return (x % 2 == 0);
}

int main() {
    int num = 5;
    
    std::cout << "Number: " << num << std::endl;
    std::cout << "Square: " << square(num) << std::endl;
    std::cout << "Cube: " << cube(num) << std::endl;
    std::cout << "Is even: " << (isEven(num) ? "Yes" : "No") << std::endl;
    
    return 0;
}

Function Pointers

#include <iostream>

// Function declarations
int add(int a, int b) { return a + b; }
int subtract(int a, int b) { return a - b; }
int multiply(int a, int b) { return a * b; }

int main() {
    // Function pointer declaration
    int (*operation)(int, int);
    
    int x = 10, y = 5;
    
    // Point to different functions
    operation = add;
    std::cout << "Addition: " << operation(x, y) << std::endl;
    
    operation = subtract;
    std::cout << "Subtraction: " << operation(x, y) << std::endl;
    
    operation = multiply;
    std::cout << "Multiplication: " << operation(x, y) << std::endl;
    
    return 0;
}