ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

基础知识点 | 1020_STL容器,dynamic_cast,重写重载和volatile等知识点

2021-10-20 23:02:37  阅读:347  来源: 互联网

标签:知识点 函数 iterator STL dynamic 多态 cast 指针 1020


1.字符串函数


函数声明:char *strcat ( char *desst, const char *src )

功能:连接字符串,将 src 字符串 拷贝到 dest 所指的字符串尾


函数声明:char *strcpy(char *dest, const char *src)

功能:复制字符串,将 src 字符串 复制赋值给 dest 所指的字符串尾



2.STL container


序列容器:动态数组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。



3.初始化


在C++中,类的静态成员必须在类内声明,在类外初始化,像下面这样:

class A{ 
private: 
    static int count ; // 类内声明 
}; 
int A::count = 0 ; // 类外初始化,不必再加static关键字 

能在类中初始化的成员只有一种,那就是静态常量成员

class A{ 
private: 
    static const int count = 0; // 静态常量成员可以在类内初始化 
};


4.dynamic_cast 动态转换


dynamic_cast<>用于C++类继承多态间的转换,分为:

  • 子类向基类的向上转型(Up Cast)

    • 向上转型其几乎肯定是成功的,只需用将子类的指针或引用赋给基类的指针或引用即可,。
    • 特殊情况:当处于多继承的类层次结构和虚拟基类时(即菱形非虚拟继承),upcast可能会有歧义。
  • 基类向子类的向下转型(Down Cast)

    • 向下转型不一定成功,必须存在虚函数,不然会出现编译错误

    • dynamic_cast将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理。

      dynamic_cast涉及运行时类别检查,如果绑定到引用或指针的对象不是目标类型的对象,则dynamic_cast失败。如果是指针类型失败,则dynamic_cast的返回结果为0,如果是引用类型的失败,则抛出一个bad_cast错误。



5.多态,重写,重载


重载和重写的区别:

  • 重载(overload):在同一个类中,函数名相同,参数列表不同,编译器会根据这些函数的不同参数列表,将同名的函数名称做修饰,从而生成一些不同名称的预处理函数,未体现多态。

  • 重写(override):也叫覆盖,子类重新定义父类中有相同名称相同参数的虚函数,主要是在继承关系中出现的,被重写的函数必须是virtual的,重写函数的访问修饰符可以不同,尽管virtual是private的,子类中重写函数改为public,protected也可以,体现了多态。


多态分为两类:

  • 静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名
  • 动态多态: 派生类虚函数实现运行时多态

静态多态和动态多态区别:

  • 静态多态的函数地址早绑定 - 编译阶段确定函数地址
  • 动态多态的函数地址晚绑定 - 运行阶段确定函数地址


6.volatile关键字


volatile 关键字用于阻止编译器过度优化:

  1. 阻止编译器为了提高速度将一个变量缓存到寄存器内而不写回(单次读写的原子性)
  2. 阻止编译器调整操作 volatile 变量的指令顺序(有序性)
  3. 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。(实现可见性)

标签:知识点,函数,iterator,STL,dynamic,多态,cast,指针,1020
来源: https://www.cnblogs.com/july-iet/p/15431237.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有