Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Are all of the C++ headers, a class?

Tags:

c++

I was reading C++ from Deitel's book, which I reached this part:

Some functions, such as main , are not members of a class. These functions are called global functions. We introduce various functions from the header here to present the concept of global functions that do not belong to a particular class.

and after saying this block (this block itself is exactly under Math library), it introduced some functions such as sqrt() which belongs to cmath header and finally it said that all functions which belongs to cmath are global!

So, this is my question: At the top we said that all functions that don't belong to any class, are global functions; but then it said that all functions which are related to cmath are global! So isn't it a contradiction? I mean if we accept this, it means that not all of the headers are classes. Is it right?

C++ Deitel Book

like image 397
Farbod Ahmadian Avatar asked Sep 11 '19 07:09

Farbod Ahmadian


People also ask

Are header files classes?

Classes are no different. Class definitions can be put in header files in order to facilitate reuse in multiple files or multiple projects. Traditionally, the class definition is put in a header file of the same name as the class, and the member functions defined outside of the class are put in a .

What is the header of a class?

A class can be broken down into two things: The first piece is a class-header which consists of the keyword " class " and the name you give to the class. Names in programming languages are also known as identifiers.

How many headers are there in C?

There are 19 header files in the Standard C Library.

What is a header class in C++?

C++ classes (and often function prototypes) are normally split up into two files. The header file has the extension of . h and contains class definitions and functions. The implementation of the class goes into the . cpp file.


3 Answers

Header files doesn't on their own introduce a new scope or namespace, or indeed any class.

Header files included with the preprocessor #include directive are basically copy-pasted as-is into the translation unit for the later stages of the compiler to parse.

In short, there's really no difference between source and header files. Both can contain function or class declarations or definitions.


A very simplified example.

Lets say you have the header file a.h which contains a single function declaration:

void a_function();

Then you have a source file which include the header file:

#include "a.h"

int main()
{
    a_function();
}

After preprocessing the translation unit would look something like this:

void a_function();

int main()
{
    a_function();
}

The function a_function isn't part of a class, it's a global function.

like image 188
Some programmer dude Avatar answered Sep 27 '22 22:09

Some programmer dude


A header is a file, a class is a type introduced by class or struct. While people often put each class in a dedicated header file for organization, there is no specific relationship between them. For example, <cmath> is just a bag of global (or, more precisely, namespace-scope) math-related functions, no "math" class needed.

We can use headers to include our classes. I mean one of their use is for including classes, so what are the other ones?

We use headers to include various declarations (nitpick shield: definitions as well), not just class declarations. These can be classes, typedefs, functions, variables, named constants, and so on.

like image 26
Quentin Avatar answered Sep 27 '22 21:09

Quentin


In addition to all the other answers you have gotten, I would like to show you a few examples that should drive home that #include ... is just a copy-paste mechanism.

I have three files:

CodeBody.h

std::cout << a << std::endl;

Numbers.h

1, 2, 3, 4, 5, 6, 7, 8

and main.cpp

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> bla = {
#include "Numbers.h"
    };

    for (auto a : bla) {
#include "CodeBody.h"
    }

    return 0;
}

This compiles and outputs:

1
2
3
4
5
6
7
8

Now, I would say that pasting code in like I did here with CodeBody.h is somewhat questionable, and you should not do that. But using an include file to populate an array or other data structure is used reasonably often, for example in digital signal processing where you use a dedicated program to calculate the coefficients for a filter, save them to a file, and then import them into your program with an include.

like image 42
Frodyne Avatar answered Sep 27 '22 22:09

Frodyne