题目描述
用C++实现一个String类,做成共享库,并通过googletest做单元测试,编写测试用例,要求使用CMakeLists组织整个工程。String类应包含一个成员变量char* m_data和以下函数:
-
默认构造函数
-
构造函数,参数为const char*
-
复制构造
-
移动构造
-
析构
-
等号重载
-
+=重载,实现追加String类,即追加字符串,例 String a = “abc”, b= “def”; a += b; //a = “abcdef”
-
反转字符串
-
以某个字符分割字符串,返回List
,例String a = “abc def g”; 输出为{“abc”, “def”, “g”}
这个题目考察的是C++的基础能力和工程能力,做一下还蛮有意思的~~
目录结构
└─string
│ CMakeLists.txt
│ readme.md
│
├─3rd_party # gtest 依赖库和头文件
│ ├─gmock
│ │ │ gmock-actions.h
│ │ │ gmock-cardinalities.h
│ │ │ gmock-function-mocker.h
│ │ │ gmock-matchers.h
│ │ │ gmock-more-actions.h
│ │ │ gmock-more-matchers.h
│ │ │ gmock-nice-strict.h
│ │ │ gmock-spec-builders.h
│ │ │ gmock.h
│ │ │
│ │ └─internal
│ │ │ gmock-internal-utils.h
│ │ │ gmock-port.h
│ │ │ gmock-pp.h
│ │ │
│ │ └─custom
│ │ gmock-generated-actions.h
│ │ gmock-matchers.h
│ │ gmock-port.h
│ │ README.md
│ │
│ ├─gtest
│ │ │ gtest-death-test.h
│ │ │ gtest-matchers.h
│ │ │ gtest-message.h
│ │ │ gtest-param-test.h
│ │ │ gtest-printers.h
│ │ │ gtest-spi.h
│ │ │ gtest-test-part.h
│ │ │ gtest-typed-test.h
│ │ │ gtest.h
│ │ │ gtest_pred_impl.h
│ │ │ gtest_prod.h
│ │ │
│ │ └─internal
│ │ │ gtest-death-test-internal.h
│ │ │ gtest-filepath.h
│ │ │ gtest-internal.h
│ │ │ gtest-param-util.h
│ │ │ gtest-port-arch.h
│ │ │ gtest-port.h
│ │ │ gtest-string.h
│ │ │ gtest-type-util.h
│ │ │
│ │ └─custom
│ │ gtest-port.h
│ │ gtest-printers.h
│ │ gtest.h
│ │ README.md
│ │
│ └─lib
│ libgmock.a
│ libgmock_main.a
│ libgtest.a
│ libgtest_main.a
│
├─app # 测试二进制存放路径
│ test
│
├─build
├─inc # String 共享库对外提供的头文件
│ String.h
│
├─lib # String 共享库存放路径
│ libstring.so
│
├─src # String 类的实现
│ CMakeLists.txt
│ String.cpp
│
└─test # gtest 测试目录
CMakeLists.txt
gtest.cpp
main.cpp
工程编译方法
cd build # 进入工程根目录下build目录
cmake ..
make
../app/test # 执行app目录下可执行文件
调试环境
- cmake version 3.16.3
- Linux version 5.11.0-34-generic
- gcc 9.3.0
- ubuntu 20.04.1