在 C++ 中建立標頭檔案
本文將解釋幾種如何在 C++ 中建立標頭檔案的方法。
使用 .h
或 .hpp
字尾在 C++ 中建立標頭檔案
當代程式很少是在沒有庫的情況下編寫的,而庫是由其他人實現的程式碼構造。C++ 提供了特殊的標記-#include
來匯入所需的庫標頭檔案和外部函式或資料結構。請注意,通常,庫標頭檔案具有特定的檔名字尾,例如 library_name.h
或 library_name.hpp
。C++ 程式結構提供了標頭檔案的概念,以簡化某些可重用程式碼塊的使用。因此,使用者可以建立自己的標頭檔案,並根據需要將其包括在原始檔中。
假設使用者需要實現一個名為 Point
的類,其中包含兩個型別為 double
的資料成員。該類具有兩個建構函式和其中定義的+
運算子。它還具有列印函式,可將兩個資料成員的值輸出到 cout
流。通常,還有一些頭保護符將 Point
類定義括起來,以確保在包含在相對較大的程式中時不會發生名稱衝突。請注意,在包含保護之後定義的變數名稱應具有一致的命名方案;通常,這些變數以類本身的名字命名。
#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
為 Point
類構造標頭檔案的另一種方法是在同一檔案中包含函式實現程式碼。請注意,將先前的程式碼片段放入 Point.hpp
檔案中,幷包含它將會引發一些未定義的錯誤。由於這些函式是在以下示例程式碼中定義的,因此我們可以將其作為 Point.hpp
標頭檔案包含在內,並使用該類及其方法。
#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
使用標頭檔案將程式中的獨立功能塊分解成模組
或者,可以使用基於模組的分隔方案來處理給定類的標頭檔案和相應的原始檔,以實現更靈活的專案檔案結構。在這種設計中,應該在單獨的 .hpp
標頭檔案中定義每個功能上不同的類,並在具有相同名稱的原始檔中實現其方法。一旦將類所需的標頭檔案包含在主原始檔中並進行編譯,前處理器將合併所有包含的標頭檔案中的程式碼塊,其結果將與編譯以下原始碼相同,後者可在單個程式碼中實現功能原始檔。
#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);
}