auto:范围for循环中可以用auto去自动识别要被迭代的数据,因为一般容器的迭代器在定义上比较复杂,特别是复用别的结构的容器比如map,他的迭代器显示类型很长所以一般用auto去自动识别,所以范围for是可以在参数那里直接写要迭代的一段连续空间,或者重载++运算符的指针的.比如单纯的数组就可以用范围for来遍历.还有就是在范围for中迭代一些复杂的自定义类型时为了不浪费深拷贝一般传引用.
final:final修饰类则这个类不可以被继承,final修饰虚函数,则这个虚函数不可以被重写.
override:override修饰虚函数,则在派生类中需要重写这个函数不然就会报错,
既然提到重写了就复习一下重载,重定义和重写的吧.
重载:重载是发生在同一个命名空间中的,同名函数根据函数的传参不同来调用不同的函数实现达到不同的效果.
重定义:重定义是指派生类继承了基类的同名函数,但是派生类又在自己的空间中重新定义了这个函数,于是这个派生类就可以使用两个函数,但是因为自身重定义的函数是同名函数,为了不起冲突就隐藏了基类的函数,除非在使用的时候显示用基类使用这个函数,不然默认使用重定义的这个函数.这就叫重定义.
重写:基类的指针或者引用调用他的虚函数,根据指针指向的实例化对象或者实例化对象的基类引用的不同来达成多态的效果,重写虚函数时返回值,函数名,和参数列表应该相同,但是有一种情况,基类返回基类的引用或指针,派生返回派生类的引用或指针,就会引起协变这个也构成重写.
既然都说道虚函数了那就说一下虚表和虚基表吧.
虚表:虚表指存放虚函数的一张表,里面放着虚函数的指针,当一个基类中有虚函数时在类实例化的构造阶段虚表会生成在类中,虚函数的地址就放在这里面,当需要调用时就通过虚表里的地址调用函数.派生类会继承基类的虚表但不是共用一张虚表,不然多态就没法实现了,但是派生类的不同实例化对象共用一张虚表,这样不同实例化对象再被基类多态时被予以相同的处理方式.派生类重写虚函数,派生类中的虚表中的虚函数也被换成重写之后的.
虚基表:首先提一下菱形继承缺点,例如有一个基类g还有两个个的派生类p1,p2,然后又有一个类同时继承p1和p2成为s,那么这个s中同时有p1和p2继承到的g中的变量,此时s中有两个同名变量,这两个同名变量不仅数据冗余还有着二义性,二义性可以用显示访问来解决但是冗余就得用虚继承来解决了.当s虚继承p1和p2时就不会存在二义性的问题,因为虚继承的派生类中的基类中有一个虚基表这个表放着一个指针的偏移量,当访问同名变量时那两个基类就会根据偏移量计算真正变量存放的位置,此时就是一个变量了,所以二义性就解决了.
array:这是一个很奇怪的容器,他是一个静态的数据,刚开始多少空间就多少空间,而且是存在于栈上的,跟c语言中的[]定义数组一样,不同的是他是一个类,可以用一些接口函数.
forword_list:这是一个单链表,只支持单向迭代,且不支持尾插尾删.
c++中若是对于一个自定义类没有去实现它的构造函数和析构函数,系统会自己调用默认的构造和析构函数,但是一旦定义了有参构造,那么系统不会就不会默认生成无参构造了就算没有无参构造,所以这里可以用这个方法,来处理这个情况:对于一个自定义类A,若没有定义构造函数,又不想手动定义构造函数可以用A()=defult来显示调用默认构造函数.那么如何不调用构造函数呢可以只声明构造函数,然后将其设为私有就不会被外界调用了,还有一个方法就是用delete修饰这个函数让其不在能被调用.
左值和右值:
左值:可以修改的变量,但是数组名不是左值,右值:const修饰的变量或者常量.
左值引用:就是给一个左值空间起一个别名,是节省空间的一种做法.
右值引用:就是给一个右值起一个别名.
左值引用不可以直接引用左值但是可以用const修饰后引用左值.
右值引用不可以引用左值,但是可以引用但是可以引用用move函数修饰后的左值.
函数的返回值或者表达式的返回值是一个右值,它具有常性.左值和右值的参数可以和构成函数重载.这是左值和右值就有用处了.我们知道在拷贝构造时可以传参一个已经实例化的对象进行1拷贝构造,也可以临时匿名构造一个类来拷贝构造,若是用实例化的对象拷贝构造就传引用然后拷贝构造.若是匿名拷贝构造就是,先构造一个匿名对象在用这个匿名对象拷贝构造需要的实例化对象,造完了又析构,这个匿名对象,看着好像没什么问题,但是若是用一个右值引用重载这个拷贝构造函数,当传入的是一个匿名类型的右值时,既然你出去就被析构了而且你也已经构造了那么不如直接来给我交换深拷贝的地址,相当于避免了一次深拷贝.
typeid函数可以打印对象的最基本类型,而decltype可以当一个类型的名称来使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人