Header file in C++

A header file in C++ is like a blueprint for your code. It stores declarations of functions, classes, constants, and other information that multiple source files (.cpp) can access and use. Think of them as shared libraries that contain the essential building blocks for your program.

Here’s how it works:

  • Include directive: You use #include directives in your source files to “include” the header file and make its contents accessible.
  • Example: #include <iostream> includes the standard input/output header, giving you access to functions like cout and cin.
  • Benefits:
    • Code reuse: You can write code once in a header and use it across multiple source files, reducing redundancy and improving code maintainability.
    • Declaration separation: Separates implementation details from declarations, making code cleaner and easier to understand.
    • Standardization: Header files like <iostream> provide standardized functionality, ensuring your code works consistently across different systems.

Standard Library Headers:

  • <iostream>: Provides basic input/output functionality (e.g., coutcin).
  • <string>: Works with strings and their manipulation (e.g., getlinesubstr).
  • <vector>: Manages dynamic arrays (e.g., push_backsize).
  • <algorithm>: Offers various algorithms for data manipulation (e.g., sortfind).
  • <cmath>: Provides mathematical functions (e.g., sincossqrt).
  • <climits>: Defines system-specific limits for integers (e.g., INT_MAXINT_MIN).

I/O Headers:

  • <fstream>: Deals with file I/O operations (e.g., openreadwrite).
  • <sstream>: Treats strings as streams for data manipulation (e.g., getlinestringstream).

For math-related functionalities in C++, the most important header file is <cmath>. This header provides a wide range of functions for performing common mathematical operations, including:

  • Trigonometric functions: sincostanasin, etc.
  • Exponential and logarithmic functions: exploglog10, etc.
  • Power functions: powsqrtcbrt, etc.
  • Rounding and flooring functions: floorceilround, etc.
  • Absolute value function: abs
  • Hyperbolic functions: sinhcoshtanh, etc.

Here’s an example of how to use <cmath> to calculate the area of a circle:

#include <cmath>
#include <iostream>

int main() {
  double radius = 5.0; // Define the circle's radius
  double area = M_PI * pow(radius, 2); // Use M_PI from `<cmath>` and `pow` function

  std::cout << "Area of the circle: " << area << std::endl;

  return 0;

This example shows how to:

  • Include <cmath> and <iostream> headers.
  • Define a variable for the circle’s radius.
  • Use pow function from <cmath> to calculate the square of the radius.
  • Use M_PI constant (value of pi) defined in <cmath> to calculate the area.
  • Print the calculated area using cout from <iostream>.

Remember, <cmath> provides many other functions for various mathematical needs.

Memory Management Headers:

  • <memory>: Provides smart pointers and memory management tools (e.g., unique_ptrshared_ptr).

String Formatting Headers:

When it comes to string formatting in C++, the essential header is <iomanip> This header provides a powerful set of manipulators to control the appearance and precision of your output streams, particularly for strings. Here are some key functionalities:

  • Formatting flags: Define alignment, justification, and padding for strings. Use std::left or std::right to align text, std::setw to specify minimum width, and std::setfill to choose a character for padding.
  • Precision control: Set the number of decimal places for floating-point numbers and the maximum number of characters displayed for strings. Use std::setprecision for decimal places and std::setfill for string truncation.
  • Base conversion: Convert numerical values between different bases like decimal, hexadecimal, and octal. Use std::decstd::hex, and std::oct manipulators.
  • Field delimiters: Specify characters to separate multiple values within a single output stream. Use std::fixed and std::scientific for floating-point number formats.

Here’s an example showcasing some of these features:

#include <iostream>
#include <iomanip>

int main() {
  double price = 123.4567;
  std::string name = "John Doe";

  // Align text and set precision for price
  std::cout << std::left << std::setw(15) << "Price: " << std::setprecision(2) << price << std::endl;

  // Truncate string and add padding
  std::cout << std::right << std::setw(20) << std::setfill('*') << name << std::endl;

  // Convert and format an integer
  int age = 30;
  std::cout << "Age (hex): " << std::hex << age << std::endl;

  return 0;

This example demonstrates:

  • Left-aligning and setting width for “Price” with two decimal places.
  • Truncating and right-aligning “John Doe” with padding using ‘*’.
  • Converting and formatting “age” in hexadecimal base.

Remember, <iomanip> offers a rich set of tools for professional and elegant string formatting.

Container Headers:

  • <map>: Implements key-value pairs for efficient data storage and retrieval.
  • <set>: Manages unique elements in a sorted order.
  • <list>: Provides a doubly-linked list for efficient element insertion and removal.

Threading Headers:

  • <thread>: Supports multithreaded programming and parallel execution.
  • <mutex>: Ensures thread safety for critical sections of code.

Utility Headers:

  • <chrono>: Works with time and date manipulation (e.g., durationhigh_resolution_clock).
  • <random>: Generates random numbers and sequences.
  • <functional>: Deals with function objects and lambdas.

Remember: This is not an exhaustive list, and the appropriate header files will vary depending on your specific program’s needs. It’s always best practice to consult the C++ standard library documentation for detailed information on available header files and their functionalities.

See also:

Header file in C

Share this post:

Newsletter Updates

Enter your email address below and subscribe to our newsletter