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 即可
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,引用,定义时必须初始化(引用的出现是为避免使用指针)
4.构造函数、析构函数
a,由类创建对象的时候,构造函数会自动调用,调用顺序根据类定义的成员先后而定。
注意:成员函数返回值,若是返回类本身对象的值,则会自动创建一个临时类对象。而如果改成返回值是引用的方式,则不会再创建另一个类对象,就是它本身。
b,析构函数,在实例化对象销毁前瞬间自动调用,一般用于清理、释放内存。如何类之间有嵌套,则调用顺序与构造函数顺序相反。
5、静态成员、友员函数
a,静态成员如何访问,需要在定义类的时候将成员或函数定义为static
b,友员函数:可以直接访问私有成员
6.函数返回值
7.const
8.继承
例,对应代码参考例程:10th_inheritance
继承关键字及访问属性
private:类外不 可见,不能直接访问
protected:类外不可见,不能直接访问;子类可以访问
public:类外可以访问
9.多重继承,采用虚拟继承方式
例,对应代码参考例程:11th_multi_inheritance
代码内存分布:
其中,其中虚拟基类构造函数只执行一次 。
10.多态,虚函数
例,对应代码参考例程:13th_polymorphism
代码例程:
cpp_projects/15th_abstract
// 一个类里有纯虚函数的话就变成了抽象类
// 这样就不能使用抽象类实例化对象
// 所有纯虚函数一定要在子类中实现,否则无法编译通过
类封装成库,libHuman.so,应用层和类分离
代码: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
编译后无法运行,需要指定动态库路径,即可
11.内存分配
malloc() 函数在 C 语言中就出现了,在 C++ 中仍然存在,但建议尽量不要使用 malloc() 函数。new 与 malloc() 函数相比,其主要的优点是,new 不只是分配了内存,它还创建了对象。