定义:为变量分配地址和存储空间,只能在一个地方声明。
声明:不分配地址,使用extern修饰,可以声明多次。
sizeof是操作符,参数可以是数据类型,也可以是变量,在编译时就计算出来了,计算数据类型占用内存大小。
strlen是库函数,参数只能是字符串,运行时才能算出来,字符串实际长度。
C语言中static用来修饰局部静态变量和外部静态变量,函数。
C++中除上述功能外,还能用来定义类的成员变量和函数,即静态成员变量和静态成员函数。
封装:将数据和操作数据的方法实现封装隐藏,对外使用提供公共接口去调用对象。
继承:子类继承父类的属性和方法,使得子类对象拥有父类的属性和方法,子类可以创建新的属性和方法。
多态:同一个方法用于不同的对象调用产生不同的行为。
函数重载,函数模板,虚函数
函数重载:在同一作用域内,可以声明几个功能类似的同名函数,但是其中参数的类型,个数,顺序,返回值不同。
virtual关键字修饰基类的成员函数,派生类重写此函数。虚函数的实现原理,当类初始化后,存在一个指针,指向一张表,表中存的时候虚函数的地址。子类继承了父类,重写了父类的虚函数后,表中的地址会替换成子类的重写后函数的地址,即虚表指针指向子类的虚表。
引用是一个变量的别名,不需要内存空间。指针初始化必须分配空间。引用不能被改变,指针可以改变多次。引用不能为空,指针可以为空。引用后不需要解引用,指针需要释放内存空间。
const用来定义一个只读的变量或者对象。在一定程度上可以提高程序的安全性和可靠性。
unique_ptr,拥有对对象的独有权,两个指针不能指向同一个对象,该对象被销毁时,会在其析构函数中删除关联的原始指针。
shared_ptr,使用引用计数实现对同一块内存的多个引用。在最后一个引用被释放时,指向的内存才释放
vector:动态数组,在内存中拥有一串连续的地址空间,在中间插入和删除元素效率低,时间复杂度为o(n)
list:双向链表,内存空间可以是不连续的,通过指针来进行数据访问,在任何地方插入删除效率高。
无法释放子类对象,导致内存泄露。
指针常量,指针存储的值只能在定义的时候初始化,其他地方不可以改变,强调指针的不可变性。
常量指针,指针指向一个可读对象,不可以通过常量指针来改变,强调所指对象的不可以变性。
每个节点都是红色或者黑色
跟节点是黑色
每个叶子结点是黑色
如果一个叶子结点是红色,那么他的儿子均是黑色
共同点是:
都是从堆上申请空间,并且需要用户手动释放。
不同的地方是: