C++ 是一门面向系统层的强类型语言,既可以编写底层驱动,也可支持大型项目开发。随着语言标准的更新,现代 C++ 提供了丰富的语言特性,使得它在性能、可维护性和表达力上得到了长足发展。
许多学习者往往停留在语法层面,忽视了“项目结构设计”、“模块拆分”、“代码组织”这些工程核心能力。本文将以“工程化 C++ 编程”为主线,带你从一个小型控制台项目出发,逐步提升从写代码到写“好”代码的能力。
典型的 C++ 项目遵循 .h
头文件和 .cpp
源文件分离原则:
.h
:声明类、函数、常量
.cpp
:实现逻辑
优点是便于模块化、团队协作、减少耦合。
txt复制编辑Project/
├── include/ // 存放头文件
│ └── student.h
├── src/ // 存放实现文件
│ └── student.cpp
├── main.cpp // 程序主入口
└── Makefile // 编译脚本
本系统支持以下功能:
我们将其拆分为模块:
cpp复制编辑#ifndef STUDENT_H
#define STUDENT_H
#include <string>
using namespace std;
class Student {
private:
string name;
int id;
float grade;
public:
Student(string name, int id, float grade);
void display() const;
int getId() const;
float getGrade() const;
string getName() const;
};
#endif
cpp复制编辑#include "student.h"
#include <iostream>
using namespace std;
Student::Student(string name, int id, float grade)
: name(name), id(id), grade(grade) {}
void Student::display() const {
cout << "ID: " << id << ", Name: " << name
<< ", Grade: " << grade << endl;
}
int Student::getId() const { return id; }
float Student::getGrade() const { return grade; }
string Student::getName() const { return name; }
cpp复制编辑#ifndef STUDENT_MANAGER_H
#define STUDENT_MANAGER_H
#include "student.h"
#include <vector>
class StudentManager {
private:
vector<Student> students;
public:
void addStudent(const Student& s);
void listAll() const;
void listSorted() const;
void findById(int id) const;
};
#endif
cpp复制编辑#include "student_manager.h"
#include <iostream>
#include <algorithm>
using namespace std;
void StudentManager::addStudent(const Student& s) {
students.push_back(s);
}
void StudentManager::listAll() const {
for (const auto& s : students) {
s.display();
}
}
void StudentManager::listSorted() const {
vector<Student> sorted = students;
sort(sorted.begin(), sorted.end(), [](const Student& a, const Student& b) {
return a.getGrade() > b.getGrade();
});
for (const auto& s : sorted) {
s.display();
}
}
void StudentManager::findById(int id) const {
for (const auto& s : students) {
if (s.getId() == id) {
s.display();
return;
}
}
cout << "Student not found." << endl;
}
cpp复制编辑#include "student_manager.h"
#include <iostream>
using namespace std;
int main() {
StudentManager manager;
int choice;
while (true) {
cout << "\n1. Add Student\n2. List All\n3. List by Grade\n4. Find by ID\n5. Exit\nChoice: ";
cin >> choice;
if (choice == 1) {
string name;
int id;
float grade;
cout << "Name: ";
cin >> name;
cout << "ID: ";
cin >> id;
cout << "Grade: ";
cin >> grade;
manager.addStudent(Student(name, id, grade));
} else if (choice == 2) {
manager.listAll();
} else if (choice == 3) {
manager.listSorted();
} else if (choice == 4) {
int id;
cout << "Enter ID: ";
cin >> id;
manager.findById(id);
} else {
break;
}
}
return 0;
}
makefile复制编辑CXX = g++
CXXFLAGS = -std=c++17 -Iinclude
SRC = src/student.cpp src/student_manager.cpp
OBJ = $(SRC:.cpp=.o)
all: main
main: $(OBJ) main.cpp
$(CXX) $(CXXFLAGS) -o main $(OBJ) main.cpp
clean:
rm -f src/*.o main
执行:
bash复制编辑make
./main
Student
)
addStudent
)
student_list
)
const
修饰不修改对象的成员函数
assert
、异常处理机制(可选)
本系统作为示例项目可扩展为更复杂的版本:
C++ 不仅是一门语言,更是一种贴近底层控制、追求性能极限的工程哲学。从小型模块化控制台程序出发,我们可以逐步构建起面向对象设计、模块分离、工程结构与规范命名等完整的项目实践能力。
学好 C++,你不仅能写出高效的程序,还能以严谨的思维处理复杂系统。希望本文能帮助你迈出“从写代码到写项目”的关键一步。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。