https://en.cppreference.com/w/cpp/numeric/math/abs
http://www.cplusplus.com/reference/cstdlib/abs/?kw=abs

cpp基础,代码实现:https://gitlab.com/neethan_/cpp_project

1、命名规范

a,变量:使用小写加下划线。
b,类型(类、结构体、类型定义、枚举):使用大驼峰,不加下划线。
c,函数:类内部函数使用小写+下划线;类外部使用大驼峰,不加下划线。

2、namespace使用

避免同名函数冲突,可引入namespace命名空间。
.h和.cpp 文件分别在代码首尾处加入
namespace A {

}
然后main函数使用 using A::Person 即可
image.png

image.png
a,为避免不同的人写代码定义类、函数等可能会有相同的部分,我们对 xx.cpp/xx.h采用 namespace A { 函数体 };
b,using使用,在主函数申明:
using A::Dog; / 把A::Dog 放入global namespace,以后可以使用Dog来表示A::Dog /
或 using namespace A;(推荐)
c, cout使用,先申明 using namespace std;

3.重载、指针/引用

a,重载,同一函数名,可以使用不同参数
b,指针跟c语言一致
c,引用,定义时必须初始化(引用的出现是为避免使用指针)
image.png

4.构造函数、析构函数

a,由类创建对象的时候,构造函数会自动调用,调用顺序根据类定义的成员先后而定。
注意:成员函数返回值,若是返回类本身对象的值,则会自动创建一个临时类对象。而如果改成返回值是引用的方式,则不会再创建另一个类对象,就是它本身。
image.png
image.png
b,析构函数,在实例化对象销毁前瞬间自动调用,一般用于清理、释放内存。如何类之间有嵌套,则调用顺序与构造函数顺序相反。
image.jpeg

5、静态成员、友员函数

a,静态成员如何访问,需要在定义类的时候将成员或函数定义为static

b,友员函数:可以直接访问私有成员

6.函数返回值

7.const

image.jpeg

8.继承

例,对应代码参考例程:10th_inheritance
image.png
继承关键字及访问属性
private:类外不 可见,不能直接访问
protected:类外不可见,不能直接访问;子类可以访问
public:类外可以访问
image.jpeg
image.jpeg

9.多重继承,采用虚拟继承方式

例,对应代码参考例程:11th_multi_inheritance
image.png
代码内存分布:
image.jpeg
其中,其中虚拟基类构造函数只执行一次 。

10.多态,虚函数

例,对应代码参考例程:13th_polymorphism

C  基础 - 图13
image.png

image.png
image.png

代码例程:
cpp_projects/15th_abstract
image.png
// 一个类里有纯虚函数的话就变成了抽象类
// 这样就不能使用抽象类实例化对象
// 所有纯虚函数一定要在子类中实现,否则无法编译通过

类封装成库,libHuman.so,应用层和类分离

image.png

image.png
代码:15th_abstract/3th/5th/

Makefile
# $<第一个依赖, $^所有的依赖
Human:main.o libHuman.so
g++ -o $@$< -L./ -lHuman
%.o : %.cpp
g++ -fPIC -c -o $@$<
libHuman.so : Englishman.o Chinese.o Human.o
g++ -shared -o $@$^
clean:
rm -f *.o Human

可以指定编译目标
make libHuman.so
image.png
image.png
编译后无法运行,需要指定动态库路径,即可
image.png

11.内存分配

malloc() 函数在 C 语言中就出现了,在 C++ 中仍然存在,但建议尽量不要使用 malloc() 函数。new 与 malloc() 函数相比,其主要的优点是,new 不只是分配了内存,它还创建了对象。

12.函数模板

image.png

image.png


GoogleTest框架

image.png

参考书籍

image.png