生成 C++ 代码工程

This commit is contained in:
root 2026-04-17 16:05:12 +08:00
parent 76e108240b
commit e511db807d
6 changed files with 487 additions and 1 deletions

24
CMakeLists.txt Normal file
View File

@ -0,0 +1,24 @@
cmake_minimum_required(VERSION 3.10)
project(SimpleCppProject VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
#
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
#
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
#
add_executable(main_app src/main.cpp src/app.cpp)
#
add_executable(basic_test tests/basic_test.cpp src/app.cpp)
#
install(TARGETS main_app RUNTIME DESTINATION bin)
install(TARGETS basic_test RUNTIME DESTINATION bin)

View File

@ -1,2 +1,61 @@
# 未命名 # Simple C++ CMake Project
这是一个简单的 C++17 项目,使用 CMake 构建系统。
## 项目结构
```
├── CMakeLists.txt # CMake 配置文件
├── README.md # 项目说明文档
├── include/
│ └── app.hpp # 应用程序头文件
├── src/
│ ├── app.cpp # 应用程序实现
│ └── main.cpp # 主程序入口
└── tests/
└── basic_test.cpp # 基本测试
```
## 编译步骤
### 1. 创建构建目录
```bash
mkdir build
cd build
```
### 2. 配置 CMake
```bash
cmake ..
```
### 3. 编译项目
```bash
cmake --build .
```
或者使用平台特定的编译命令:
```bash
make # Linux/macOS
```
### 4. 运行主程序
编译完成后,可执行文件位于 `build/bin/` 目录下:
```bash
# 运行主程序
./build/bin/main_app
# 运行测试
./build/bin/basic_test
```
## 功能说明
- **main_app**: 主程序,演示基本的应用程序功能
- **basic_test**: 基本测试程序,验证核心功能
## 依赖要求
- CMake 3.10 或更高版本
- 支持 C++17 的编译器(如 GCC 7+, Clang 5+, MSVC 2017+

87
include/app.hpp Normal file
View File

@ -0,0 +1,87 @@
#ifndef SIMPLE_APP_HPP
#define SIMPLE_APP_HPP
#include <string>
#include <vector>
/**
* @brief
*/
class SimpleApp {
public:
/**
* @brief
* @param name
*/
explicit SimpleApp(const std::string& name);
/**
* @brief
* @return
*/
std::string getName() const;
/**
* @brief
* @param name
*/
void setName(const std::string& name);
/**
* @brief
* @param number
*/
void addNumber(int number);
/**
* @brief
* @return
*/
int getSum() const;
/**
* @brief
* @return
*/
const std::vector<int>& getNumbers() const;
/**
* @brief
*/
void clearNumbers();
/**
* @brief
* @return
*/
std::string getInfo() const;
private:
std::string appName;
std::vector<int> numbers;
};
/**
* @brief
* @param a
* @param b
* @return
*/
int add(int a, int b);
/**
* @brief
* @param a
* @param b
* @return
*/
int multiply(int a, int b);
/**
* @brief
* @param name
* @return
*/
std::string generateWelcomeMessage(const std::string& name);
#endif // SIMPLE_APP_HPP

64
src/app.cpp Normal file
View File

@ -0,0 +1,64 @@
#include "app.hpp"
#include <sstream>
#include <numeric>
SimpleApp::SimpleApp(const std::string& name) : appName(name) {
}
std::string SimpleApp::getName() const {
return appName;
}
void SimpleApp::setName(const std::string& name) {
appName = name;
}
void SimpleApp::addNumber(int number) {
numbers.push_back(number);
}
int SimpleApp::getSum() const {
if (numbers.empty()) {
return 0;
}
return std::accumulate(numbers.begin(), numbers.end(), 0);
}
const std::vector<int>& SimpleApp::getNumbers() const {
return numbers;
}
void SimpleApp::clearNumbers() {
numbers.clear();
}
std::string SimpleApp::getInfo() const {
std::ostringstream oss;
oss << "Application: " << appName << "\n";
oss << "Numbers count: " << numbers.size() << "\n";
oss << "Sum of numbers: " << getSum() << "\n";
if (!numbers.empty()) {
oss << "Numbers: ";
for (size_t i = 0; i < numbers.size(); ++i) {
if (i > 0) {
oss << ", ";
}
oss << numbers[i];
}
}
return oss.str();
}
int add(int a, int b) {
return a + b;
}
int multiply(int a, int b) {
return a * b;
}
std::string generateWelcomeMessage(const std::string& name) {
return "Welcome, " + name + "! This is a simple C++ application.";
}

63
src/main.cpp Normal file
View File

@ -0,0 +1,63 @@
#include "app.hpp"
#include <iostream>
#include <string>
int main() {
std::cout << "=== Simple C++ Application Demo ===\n\n";
// 演示基本函数
std::cout << "1. Basic function demonstrations:\n";
std::cout << " add(5, 3) = " << add(5, 3) << "\n";
std::cout << " multiply(4, 6) = " << multiply(4, 6) << "\n";
std::cout << " Message: " << generateWelcomeMessage("User") << "\n\n";
// 创建应用程序实例
SimpleApp app("DemoApp");
// 演示应用程序功能
std::cout << "2. Application instance operations:\n";
std::cout << " Initial app name: " << app.getName() << "\n";
// 添加一些数字
app.addNumber(10);
app.addNumber(20);
app.addNumber(30);
app.addNumber(40);
// 显示应用程序信息
std::cout << "\n After adding numbers:\n";
std::cout << " " << app.getInfo() << "\n";
// 修改应用程序名称
app.setName("UpdatedApp");
std::cout << "\n After updating name:\n";
std::cout << " New app name: " << app.getName() << "\n";
// 添加更多数字
app.addNumber(50);
std::cout << "\n After adding 50:\n";
std::cout << " Sum: " << app.getSum() << "\n";
// 清空数字并重新开始
app.clearNumbers();
std::cout << "\n After clearing numbers:\n";
std::cout << " Numbers count: " << app.getNumbers().size() << "\n";
// 重新添加一些数字
for (int i = 1; i <= 5; ++i) {
app.addNumber(i * i); // 添加平方数
}
std::cout << "\n After adding squares 1-5:\n";
std::cout << " " << app.getInfo() << "\n\n";
// 最终总结
std::cout << "3. Summary:\n";
std::cout << " Application demo completed successfully.\n";
std::cout << " Total numbers processed: " << app.getNumbers().size() << "\n";
std::cout << " Final sum: " << app.getSum() << "\n";
std::cout << "\n=== End of Demo ===\n";
return 0;
}

189
tests/basic_test.cpp Normal file
View File

@ -0,0 +1,189 @@
#include "app.hpp"
#include <cassert>
#include <iostream>
/**
* @brief add
*/
void testAddFunction() {
std::cout << "Testing add function...\n";
// 测试基本加法
assert(add(0, 0) == 0);
assert(add(5, 3) == 8);
assert(add(-5, 10) == 5);
assert(add(-3, -7) == -10);
// 测试边界情况
assert(add(100, 200) == 300);
std::cout << " add function tests passed!\n";
}
/**
* @brief multiply
*/
void testMultiplyFunction() {
std::cout << "Testing multiply function...\n";
// 测试基本乘法
assert(multiply(0, 5) == 0);
assert(multiply(5, 3) == 15);
assert(multiply(-5, 3) == -15);
assert(multiply(-4, -5) == 20);
// 测试边界情况
assert(multiply(10, 10) == 100);
std::cout << " multiply function tests passed!\n";
}
/**
* @brief SimpleApp
*/
void testSimpleAppBasic() {
std::cout << "Testing SimpleApp basic functionality...\n";
// 测试构造函数和getter
SimpleApp app("TestApp");
assert(app.getName() == "TestApp");
// 测试setter
app.setName("RenamedApp");
assert(app.getName() == "RenamedApp");
// 测试添加数字和求和
assert(app.getSum() == 0); // 初始和为0
assert(app.getNumbers().empty());
app.addNumber(10);
assert(app.getSum() == 10);
assert(app.getNumbers().size() == 1);
assert(app.getNumbers()[0] == 10);
app.addNumber(20);
assert(app.getSum() == 30);
assert(app.getNumbers().size() == 2);
std::cout << " SimpleApp basic tests passed!\n";
}
/**
* @brief SimpleApp
*/
void testSimpleAppNumberManagement() {
std::cout << "Testing SimpleApp number management...\n";
SimpleApp app("NumberApp");
// 添加多个数字
for (int i = 1; i <= 5; ++i) {
app.addNumber(i * 10);
}
// 验证数字
const auto& numbers = app.getNumbers();
assert(numbers.size() == 5);
assert(numbers[0] == 10);
assert(numbers[1] == 20);
assert(numbers[2] == 30);
assert(numbers[3] == 40);
assert(numbers[4] == 50);
// 验证总和
assert(app.getSum() == 150); // 10+20+30+40+50 = 150
// 测试清空功能
app.clearNumbers();
assert(app.getNumbers().empty());
assert(app.getSum() == 0);
// 重新添加并验证
app.addNumber(100);
app.addNumber(200);
assert(app.getSum() == 300);
assert(app.getNumbers().size() == 2);
std::cout << " SimpleApp number management tests passed!\n";
}
/**
* @brief generateWelcomeMessage
*/
void testWelcomeMessage() {
std::cout << "Testing generateWelcomeMessage function...\n";
std::string msg1 = generateWelcomeMessage("Alice");
assert(msg1.find("Alice") != std::string::npos);
assert(msg1.find("Welcome") != std::string::npos);
std::string msg2 = generateWelcomeMessage("Bob");
assert(msg2.find("Bob") != std::string::npos);
std::string msg3 = generateWelcomeMessage("");
assert(msg3.find("Welcome") != std::string::npos);
std::cout << " Welcome message tests passed!\n";
}
/**
* @brief SimpleApp
*/
void testAppInfo() {
std::cout << "Testing SimpleApp info generation...\n";
SimpleApp app("InfoApp");
// 空应用的信息
std::string emptyInfo = app.getInfo();
assert(emptyInfo.find("InfoApp") != std::string::npos);
assert(emptyInfo.find("Numbers count: 0") != std::string::npos);
// 添加数字后的信息
app.addNumber(1);
app.addNumber(2);
app.addNumber(3);
std::string fullInfo = app.getInfo();
assert(fullInfo.find("InfoApp") != std::string::npos);
assert(fullInfo.find("Numbers count: 3") != std::string::npos);
assert(fullInfo.find("Sum of numbers: 6") != std::string::npos);
assert(fullInfo.find("1, 2, 3") != std::string::npos);
std::cout << " App info generation tests passed!\n";
}
/**
* @brief
*/
int main() {
std::cout << "=== Starting Basic Tests ===\n\n";
try {
testAddFunction();
std::cout << "\n";
testMultiplyFunction();
std::cout << "\n";
testWelcomeMessage();
std::cout << "\n";
testSimpleAppBasic();
std::cout << "\n";
testSimpleAppNumberManagement();
std::cout << "\n";
testAppInfo();
std::cout << "\n=== All Tests Passed! ===\n";
return 0;
} catch (const std::exception& e) {
std::cerr << "Test failed with exception: " << e.what() << "\n";
return 1;
} catch (...) {
std::cerr << "Test failed with unknown exception\n";
return 1;
}
}