随笔分类 - C++
摘要:引用与指针的区别中有一点是,指针可以更改指向而引用在初始化后就不能更改指向 对于下面,编译器没有报错: 其实,这里不是更改了引用name的指向(从b改为c) 实际上,name=c的意思是,使用c的值来更改name指向的变量的值,也就是b的值,实际上等价于b=c;并没有更改name的指向 从下面的结果
阅读全文
摘要:转自: https://blog.csdn.net/qq_22660775/article/details/89854545 返回引用与返回非引用的区别: 返回引用时,函数内部不会构造一个临时变量,而是直接将返回值返回出去。而当为非引用时,会构造一个临时变量(但不一定),然后返回这个匿名的临时变量。
阅读全文
摘要:默认构造函数的生成: 在没有显示定义的情况下,编译器只会在四种情况下生成一个默认构造函数。 如果类成员X中没有特殊情况,则编译期只会生成一个不做任何工作的默认构造函数,这个默认构造函数是trivial的。 而只在四种情况下才会生成一个non-trivial的默认构造函数。 1.class的某个成员带
阅读全文
摘要:转自https://www.cnblogs.com/findumars/p/9845429.html 首先第一点: 为什么运行时多态无法在编译期进行: 比如 对于这样一种最简单的形式,A1派生类对基类A中的func方法进行了重写。 在我们的程序中,假如有一个A*型指针pa: 对于pa->func()
阅读全文
摘要:成员函数的调用: 1.非静态成员函数: 对静态函数的调用实际上经历了以下的过程: 1.改写函数原型,安插一个this指针作为额外的参数 2.将函数内对非静态成员的存取改为经由this指针来存取(静态成员不属于特定的某个实例,属于整个类,不应被绑定在this指针上) 3.将成员函数重新写成一个新的外部
阅读全文
摘要:1.单一继承下的虚函数(待更新) 2.多重继承下的虚函数 多重继承讲给虚函数带来很大的问题,主要有三点: 1.虚析构函数: 析构函数一般都是虚函数,不然删除某个指向派生类的基类指针将不会析构派生类的内容。 首先关于多重继承: 如以下这个关系: A与B同级,C分别继承这两个类。 如果A* a=new
阅读全文
摘要:在冯诺依曼的体系结构中,一个进程必须有:代码段,堆栈段,数据段。 进程的虚拟地址空间图示如下: 堆栈段: 1. 为函数内部的局部变量提供存储空间。 2. 进行函数调用时,存储“过程活动记录”。 3. 用作暂时存储区。如计算一个很长的算术表达式时,可以将部分计算结果压入堆栈。 数据段(静态存储区):
阅读全文
摘要:快排: Parition函数用于进行一次快排,本次快排将某个元素放在它应该呆在的位置pos。pos左侧全比它小,pos右侧全比它大。 Parition中,设置low指针与high指针,以待排元素为标杆,判断high指向元素是否大于待排元素,若小于则与low指向的元素交换,并切换到low指针。low指
阅读全文
摘要:序列式容器: 1.vector: 数据结构: 数据成员只有三个:1.iterator start;//指向目前正在使用的空间头 2.iterator end;//指向目前正在使用的空间尾 3.iterator end_of_storage;//指向可用空间尾 迭代器: vector的迭代器属于随机访
阅读全文
摘要:指针和引用的区别: 引用不是一个对象,所以它没有实际的地址。指针是一个对象,它有实际的地址,所以我们可以定义指向指针的指针,但是绝对不能定义指向引用的指针。 引用在其生命周期中不能改变所绑定的对象,但是指针可以在其生命周期内先后指向不同的对象。 引用在定义的时候必须进行初始化,而指针可以不必进行初始
阅读全文
摘要:普通情况下,初始化和赋值好像没有什么特别去区分它的意义。 int a=100;和int a;a=100间仿佛没有任何区别,但是当c++中引入类后,情况变得有些复杂。 首先理清下构造函数的一些东西。 关于构造函数,前面有两篇随笔写了默认构造函数和拷贝构造函数,其实还包括参数为一些成员变量属性的构造函数
阅读全文
摘要:成员初始化列表:用于辅佐构造函数(可以是默认构造函数),对成员变量进行赋值。 一般情况下,使用成员初始化列表与在构造函数内部对成员进行赋值没有什么好坏之分,使用哪种方式对对象进行初始化全凭心情。 但是,在以下四种情况的成员变量中,只能使用成员初始化列表进行初始化: 1.当初始化一个const mem
阅读全文
摘要:拷贝构造函数不同于默认构造函数,class X的拷贝构造函数要求传递参数中必须有class X对象,当然参数列表可以是多参数的,但是第一个参数必须是class X类,且第二个及后续参数需要给与默认值。 默认的拷贝构造函数的形式: 当class没有提供一个显式(explicit)的拷贝构造函数时,将有
阅读全文
摘要:在以下四种情况中,如果类中没有定义一个默认构造函数,则编译器会自动生成一个nontrivial的默认构造函数,而不是一个不做事情的trivial默认构造函数:1.内含一个成员变量,而这个成员变量所属的类中含有默认构造函数,则此时需要为此类生成一个implicit default constructo
阅读全文
摘要:首先,假设: 基类为Point *ptr; ptr=new Point2d; Point2d为派生类。 z()为基类的虚拟成员函数,那么在调用ptr->z()时,这种使用基类指针来调用正确的z()实体的多态是怎么实现的?或者说,需要什么信息才能在执行期调用正确的z()? 要调用正确的z(),必须要知
阅读全文
摘要:消极的多态: Point *ptr; ptr=new Point2d; 其中,Point为基类,Point2d为Point类的派生类,这种多态称为消极的多态。这种多态形式在编译时期就已完成,ptr扮演一个输送机制,这样在程序的任何地方均可以使用ptr来指向任意一个派生类。他被称为消极的,是因为没有对
阅读全文
摘要:存储持续性:变量从声明到销毁。 自动存储持续性:自动变量(如在函数内int a;)的持续性为自动,在代码块({...}或函数内)中被创建,执行完函数或代码块后销毁,内存被释放。如在函数内(包括main)声明自动变量,则函数结束后就销毁。 静态存储持续性:在函数外(如在main之前声明int a;另外
阅读全文