小組合作開發 C++ 汽車 4S 店管理系統,各自編寫模塊(銷售、維修、保養),如何將獨立程序拼裝成完整系統?
// 錯誤:在 .cpp 中 #include "other.cpp"
#include "sales.cpp" // 導致重複定義、編譯極慢、耦合極強
// sales.h
#ifndef SALES_H
#define SALES_H
// 前向聲明/類型定義
struct CarInfo;
struct Customer;
// 接口函數聲明
bool addCar(const CarInfo& car);
bool sellCar(int carId, const Customer& customer);
double getSalesStatistics(int year, int month);
#endif
// sales.cpp
#include "sales.h"
#include "database.h" // 內部依賴
// 內部輔助類/函數 (不暴露在頭文件)
static bool validateCar(const CarInfo& car) { ... }
bool addCar(const CarInfo& car) {
if (!validateCar(car)) return false;
return Database::insert("cars", car);
}
// ... 其他實現 ...
// main.cpp
#include "sales.h"
#include "repair.h"
#include "maintenance.h"
int main() {
// 選單邏輯
int choice;
while (cin >> choice) {
switch (choice) {
case 1: handleSales(); break; // 調用 sales.h 接口
case 2: handleRepair(); break; // 調用 repair.h 接口
case 3: handleMaintenance(); break;
}
}
}
# 獨立編譯各模塊為目標文件
g++ -c sales.cpp -o sales.o
g++ -c repair.cpp -o repair.o
g++ -c maintenance.cpp -o maintenance.o
g++ -c main.cpp -o main.o
# 鏈接生成可執行文件
g++ sales.o repair.o maintenance.o main.o -o 4S_Management
或使用構建系統 (CMake/Makefile/IDE 專案) 自動管理依賴。
| 規範 | 內容 |
|---|---|
| 命名空間 | 各模塊用獨立命名空間 namespace sales { ... } |
| 頭文件護衛 | 統一 #pragma once 或 #ifndef MODULE_H |
| 依賴方向 | 高層依賴抽象(頭文件),不依賴具體實現(.cpp) |
| 內部符號隱藏 | 非接口函數加 static 或匿名命名空間 |
| 版本控制 | Git 分支策略:feature 分支開發,PR 合併到 develop |