Crie um arquivo de cabeçalho em C++

Jinku Hu 12 outubro 2023
  1. Use os sufixos .h ou .hpp para criar um arquivo de cabeçalho em C++
  2. Use arquivos de cabeçalho para dividir blocos de funções separados do programa em módulos
Crie um arquivo de cabeçalho em C++

Este artigo explicará vários métodos de como criar um arquivo de cabeçalho em C++.

Use os sufixos .h ou .hpp para criar um arquivo de cabeçalho em C++

Programas contemporâneos raramente são escritos sem bibliotecas, que são construções de código implementadas por outros. C++ fornece token especial - #include para importar arquivos de cabeçalho de biblioteca necessários e funções externas ou estruturas de dados. Observe que, geralmente, os arquivos de cabeçalho de biblioteca têm um sufixo de nome de arquivo específico, como library_name.h ou library_name.hpp. A estrutura do programa C++ fornece o conceito de arquivos de cabeçalho para facilitar o uso de certos blocos de código reutilizáveis. Assim, os usuários podem criar seus próprios arquivos de cabeçalho e incluí-los nos arquivos de origem conforme necessário.

Suponha que o usuário precise implementar uma classe chamada Point contendo dois membros de dados do tipo double. A classe possui dois construtores e o operador + definidos nela. Ele também tem uma função print para enviar os valores de ambos os membros de dados para o fluxo cout. Geralmente, também existem protetores de cabeçalho envolvendo a definição de classe Point para garantir que nenhum conflito de nomes ocorra ao incluir em programas relativamente grandes. Observe que deve haver um esquema de nomenclatura consistente para os nomes das variáveis ​​definidas após a guarda de inclusão; normalmente, essas variáveis ​​são nomeadas após a própria classe.

#ifndef POINT_H
#define POINT_H

class Point {
  double x, y;

 public:
  Point();
  Point(double, double);
  Point operator+(const Point &other) const;
  void print();
};

#endif

Outro método para estruturar um arquivo de cabeçalho para a classe Point é incluir o código de implementação da função no mesmo arquivo. Observe que colocar o fragmento de código anterior em um arquivo Point.hpp e incluí-lo gerará vários erros indefinidos. Como as funções são definidas no código de exemplo a seguir, podemos incluí-lo como um arquivo de cabeçalho Point.hpp e usar a classe com seus métodos.

#include <iostream>
#include <vector>

#ifndef POINT_H
#define POINT_H

class Point {
  double x, y;

 public:
  Point();
  Point(double, double);
  Point operator+(const Point &other) const;
  void print();
};

Point::Point() { x = y = 0.0; }

Point::Point(double a, double b) {
  x = a;
  y = b;
}

Point Point::operator+(const Point &other) const {
  return {x + other.x, y + other.y};
}

void Point::print() { std::cout << "(" << x << "," << y << ")" << std::endl; }

#endif

Use arquivos de cabeçalho para dividir blocos de funções separados do programa em módulos

Alternativamente, pode-se utilizar um esquema de separação baseado em módulo para cabeçalhos e arquivos de origem correspondentes da classe dada para implementar uma estrutura de arquivo de projeto mais flexível. Neste projeto, deve-se definir cada classe funcionalmente distinta em um arquivo de cabeçalho .hpp separado e implementar seus métodos em um arquivo de origem com o mesmo nome. Depois que o arquivo de cabeçalho necessário da classe for incluído no arquivo de origem principal e compilado, o pré-processador combinará os blocos de código de todos os arquivos de cabeçalho incluídos e o resultado será o mesmo que compilar o seguinte código de origem, que implementa a funcionalidade em um único arquivo fonte.

#include <iostream>
#include <vector>

#ifndef POINT_H
#define POINT_H

class Point {
  double x, y;

 public:
  Point();
  Point(double, double);
  Point operator+(const Point &other) const;
  void print();
};

Point::Point() { x = y = 0.0; }

Point::Point(double a, double b) {
  x = a;
  y = b;
}

Point Point::operator+(const Point &other) const {
  return {x + other.x, y + other.y};
}

void Point::print() { std::cout << "(" << x << "," << y << ")" << std::endl; }
#endif

using std::cin;
using std::cout;

int main() {
  double x, y;

  cin >> x >> y;
  Point a1(x, y);
  cin >> x >> y;
  Point a2(x, y);

  cout << "a1: ";
  a1.print();
  cout << "a2: ";
  a2.print();

  a1 = a1 + a2;
  cout << "a1+a2: ";
  a1.print();

  exit(EXIT_SUCCESS);
}
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook