C++学习教程,总结
C++对C语言的加强
- dm01_helloworld 初识C++
- dm02_namespace 认识C++的命名空间概念
- dm03_variableDefinitions 变量可以随用随定义(没有限制必须将变量在作用域开头定义)
- dm04_registerKeyword C++中的register关键字(可以进行取地址操作)
- dm05_variableCheck C++对变量检测增强
- dm06_struct C++对struct关键字进行功能增强
- dm07_typeCheck C++对变量类型检测增强
- dm08_addBoolTypeKeyword C++新增bool类型
- dm09_ternaryOperator 对三目运算符进行功能增强(可以做左值)
- dm10_constBase const关键字基础介绍
类基础
- dm01_classEncapsulation 类的基本概念及类的封装
- dm02_classSeparateCompilation 类的分离编译
- dm03_objectOriented1 面向对象编程1
- dm04_objectOriented2 面向对象编程2
- dm05_classConstructor1 类的构造函数与析构函数基础
- dm05_classConstructor2 构造函数的分类
- dm05_classConstructor3 默认构造函数和默认拷贝构造函数
- dm05_classConstructorCopy12 拷贝构造函数应用场景,用一个对象初始化另外一个对象
- dm05_classConstructorCopy3 拷贝构造函数的第3种应用场景,对象作为函数参数
- dm05_classConstructorCopy4 拷贝构造函数的第4种应用场景,对象作为函数返回值
- dm05_classConstructorSummarizing 构造函数的调用规则
- dm06_deepCopy 类的深浅拷贝
- dm07_constructorInitializerList 构造函数的初始化列表
- dm08_constructorSummary1 强化训练1: 构造函数-析构函数调用顺序 匿名对象的生命周期
- dm09_constructorSummary2 强化训练2: 构造函数中调用构造函数 (产生匿名对象)
- dm10_new_delete1 C++中的 new delete基础知识
- dm11_new_delete2 深入分析new和delete
- dm12_static 类中的static关键字
- dm13_objectOrientedModel1 面向对象模型初探
- dm14_objectOrientedModel2 面向对象模型剖析
- dm15_this_point 学习this指针
- dm16_friend_function 友元函数
- dm17_friend_class 友元类
- dm18_operator_overloading_1 运算符重载入门技术推演
- dm19_operator_overloading_2 运算符重载的两种方法
- dm20_operator_overloading_3 一元运算符重载++ --
- dm21_operator_overloading_4 运算符重载整理
- dm22_operator_overloading_5 友元函数定义运算符重载<<
- dm23_operator_overloading_6 运算符重载=
- dm24_operator_overloading_7 运算符重载[] == !=
- dm25_operator_overloading_8 运算符重载() bool !
- dm26_operator_overloading_9 运算符重载&& ||
- dm27_mystring 实现一个MyString类
类的继承
- dm01_definition 类继承的定义
- dm02_access 类继承中的访问控制
- dm03_principle_of_compatibility 类继承中的兼容性原则
- dm04_继承中的构造与析构
- dm05_继承与组合下的构造与析构
- dm06_继承中的同名成员变量和函数
- dm07_继承中的static关键字
- dm08_多继承
- dm09_多继承的二义性和虚继承的解决方案
- dm10_多继承原理抛转
- dm11_类型兼容性原则遇上函数重写
- dm12_多态案例
- dm13_虚析构函数
- dm14_重载重写重定义
- dm15_多态原理探究
- dm16_证明vptr指针的存在
- dm17_vptr指针的分步初始化
函数模板与类模板
- dm01_函数模板语法基础
- dm02_函数模板做函数参数强化
- dm03_函数模板遇上函数重载
- dm04_函数模板和普通函数在一起的调用规则
- dm05_编译器实现模板机制剖析
- dm06_类模板基础及单个类模板语法
- dm07_继承中的类模板语法
- dm08_复数类_成员函数在类内部
- dm09_复数类_成员函数在同一个文件的类的外部
- dm10_复数类_分离编译
- dm11_类模板中的static关键字
- dm12_类模板在项目开发中的应用_实现MyVector
Boost官网https://www.boost.org
wget https://dl.bintray.com/boostorg/release/1.69.0/source/boost_1_69_0.tar.gz -O boost_1_69_0.tar.gz
tar -xvf boost_1_69_0.tar.gz
cd boost_1_69_0
./bootstrap.sh
./b2 --with-date_time --with-timer install./b2 --show-librariescmake --help-module FindBoost日志库 https://github.com/gabime/spdlog
wget https://github.com/gabime/spdlog/archive/v1.3.1.tar.gz -O spdlog-1.3.1.tar.gz
tar -xf spdlog-1.3.1.tar.gz
cd spdlog-1.3.1
mkdir build
cd build
cmake -DSPDLOG_BUILD_BENCH=OFF ..
make -j4
sudo make install借助pkg-config
include(FindPkgConfig)
pkg_check_modules(SPDLOG REQUIRED spdlog>=1.3.1)
include_directories(${SPDLOG_INCLUDE_DIRS})
link_libraries(${SPDLOG_LIBRARIES})命令行解析库 https://github.com/tanakh/cmdline
https://github.com/open-source-parsers/jsoncpp
apt install libjsoncpp-devwget https://github.com/open-source-parsers/jsoncpp/archive/1.8.4.tar.gz -O jsoncpp-1.8.4.tar.gz
tar -xvf jsoncpp-1.8.4.tar.gz
cd jsoncpp-1.8.4
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON ..
make -j8
make install借助pkg-config
pkg_check_modules(JSONCPP REQUIRED jsoncpp>=1.4.0)
include_directories(${JSONCPP_INCLUDE_DIRS})
link_libraries(${JSONCPP_LIBRARIES})静态库名字为jsoncpp_static.a,但是没有对应的pkg-config的配置,我们手动添加一个
cp /usr/local/lib/pkgconfig/jsoncpp.pc /usr/local/lib/pkgconfig/jsoncpp-static.pc
然后修改/usr/local/lib/pkgconfig/jsoncpp-static.pc该文件
将Name改为Name: jsoncpp-static, 将Libs改为Libs: -L${libdir} -ljsoncpp_static
运行pkg-config查看一下
$ pkg-config --list-all | grep jsoncpp
jsoncpp jsoncpp - A C++ library for interacting with JSON
jsoncpp-static jsoncpp-static - A C++ library for interacting with JSON然后在cmake里面就可以这样使用jsoncpp静态库了
pkg_check_modules(JSONCPP_STATIC REQUIRED jsoncpp-static>=1.4.0)
include_directories(${JSONCPP_STATIC_INCLUDE_DIRS})
link_libraries(${JSONCPP_STATIC_LIBRARIES})mongodb 4.0: mongocxx >= 3.4: mongoc >= 1.13.0
https://docs.mongodb.com/ecosystem/drivers/c
http://mongoc.org/libmongoc/current/installing.html
Prerequisites for libmongoc
On Debian / Ubuntu:
sudo apt-get install cmake libssl-dev libsasl2-dev
On RedHat / Fedora:
sudo yum install cmake openssl-devel cyrus-sasl-devel
wget https://github.com/mongodb/mongo-c-driver/releases/download/1.15.2/mongo-c-driver-1.15.2.tar.gz
tar -xvf mongo-c-driver-1.15.2.tar.gz
cd mongo-c-driver-1.15.2
mkdir cmake-build
cd cmake-build
cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF -DCMAKE_BUILD_TYPE=Release ..
make -j8
make install
ldconfig
pkg-config --cflags --libs libmongoc-1.0
pkg-config --cflags --libs libbson-1.0https://docs.mongodb.com/ecosystem/drivers/cxx
http://mongocxx.org/mongocxx-v3/installation
wget https://github.com/mongodb/mongo-cxx-driver/archive/r3.4.0.tar.gz -O mongo-cxx-driver-r3.4.0.tar.gz
tar -xvf mongo-cxx-driver-r3.4.0.tar.gz
cd mongo-cxx-driver-r3.4.0
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j8
make install
ldconfig
pkg-config --cflags --libs libmongocxx编译动态库选项
cmake -DBUILD_SHARED_LIBS=ON ..
编译静态库选项
cmake -DBUILD_SHARED_LIBS=OFF ..
使用动态库
# mongocxx shared library
find_package(libmongocxx 3.4.0 REQUIRED)
include_directories(${LIBMONGOCXX_INCLUDE_DIRS})
link_libraries(${LIBMONGOCXX_LIBRARIES})使用静态库
# mongocxx static library
find_package(libmongocxx-static 3.4.0 REQUIRED)
include_directories(${LIBMONGOCXX_STATIC_INCLUDE_DIRS})
link_libraries(${LIBMONGOCXX_STATIC_LIBRARIES})
foreach (LIBMONGOCXX_STATIC_DEFINITION ${LIBMONGOCXX_STATIC_DEFINITIONS})
add_definitions(-D${LIBMONGOCXX_STATIC_DEFINITION})
endforeach (LIBMONGOCXX_STATIC_DEFINITION)acl-dev库https://github.com/acl-dev/acl
https://github.com/acl-dev/acl/blob/master/BUILD.md
wget https://github.com/acl-dev/acl/archive/v3.5.0.tar.gz -O acl-3.5.0.tar.gz
tar -xvf acl-3.5.0.tar.gz
cd acl-3.5.0
make build_one
# library file
cp libacl_all.* /usr/local/lib
# head file
mkdir -p /usr/local/include/acl
cp -r -p lib_acl/include/* /usr/local/include/acl/
cp -r -p lib_protocol/include/* /usr/local/include/acl/
cp -r -p lib_acl_cpp/include/acl_cpp /usr/local/include/acl/编写 libacl_all.pc 文件,并将其放到/usr/local/lib/pkgconfig/目录下
prefix=/usr/local
exec_prefix=${prefix}
libdir=${prefix}/lib
includedir=${exec_prefix}/include
Name: libacl_all
Description: acl library content acl protocol acl_cpp.
Version: 3.5.0
URL: https://github.com/acl-dev/acl
Requires:
Libs: -L${libdir} -lacl_all
Cflags: -I${includedir}/acl
pkg-config --cflags --libs libacl_all
pkg-config --modversion libacl_allwget https://github.com/Kitware/CMake/releases/download/v3.15.5/cmake-3.15.5.tar.gz
tar -xvf cmake-3.15.5.tar.gz
cd cmake-3.15.5mkdir build
cd build
cmake ..
make -j8
make install./bootstrap
make -j8
make install