函数声明:char *strcat ( char *desst, const char *src )
功能:连接字符串,将 src 字符串 拷贝到 dest 所指的字符串尾
函数声明:char *strcpy(char *dest, const char *src)
功能:复制字符串,将 src 字符串 复制赋值给 dest 所指的字符串尾
序列容器:动态数组vector,双端队列deque(本质是动态数组加索引),链表list
关联容器:set,map,multiset,multimap,bitset(叫bit_array更合适)。
容器适配器:stack,queue,priority_queue。
关于迭代器:
关联容器删除当前的iterator,只会使当前的iterator失效,只要在erase前,递增当前iterator即可。
序列式容器,删除当前的iterator会使后面所有元素的iterator都失效。这是因为vetor, deque使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置。不过erase方法可以返回下一个有效的iterator,list使用了不连续分配的内存,但它的erase方法也会返回下一个有效的iterator。
在C++中,类的静态成员必须在类内声明,在类外初始化,像下面这样:
class A{ private: static int count ; // 类内声明 }; int A::count = 0 ; // 类外初始化,不必再加static关键字
能在类中初始化的成员只有一种,那就是静态常量成员。
class A{ private: static const int count = 0; // 静态常量成员可以在类内初始化 };
dynamic_cast<>用于C++类继承多态间的转换,分为:
子类向基类的向上转型(Up Cast)
基类向子类的向下转型(Down Cast)
向下转型不一定成功,必须存在虚函数,不然会出现编译错误
dynamic_cast将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理。
dynamic_cast涉及运行时类别检查,如果绑定到引用或指针的对象不是目标类型的对象,则dynamic_cast失败。如果是指针类型失败,则dynamic_cast的返回结果为0,如果是引用类型的失败,则抛出一个bad_cast错误。
重载和重写的区别:
重载(overload):在同一个类中,函数名相同,参数列表不同,编译器会根据这些函数的不同参数列表,将同名的函数名称做修饰,从而生成一些不同名称的预处理函数,未体现多态。
重写(override):也叫覆盖,子类重新定义父类中有相同名称相同参数的虚函数,主要是在继承关系中出现的,被重写的函数必须是virtual的,重写函数的访问修饰符可以不同,尽管virtual是private的,子类中重写函数改为public,protected也可以,体现了多态。
多态分为两类:
静态多态和动态多态区别:
volatile 关键字用于阻止编译器过度优化: