补充知识点:
1.console下的read系列函数都只是读取输入缓存区的数据!!!
2.如果没有加任何关键字修饰直接在子类中重写父类函数的话,会默认这种方式为隐藏方式重写,但是我们还是养成良好的编程习惯,该加的关键字都加上。
3.结构体类型是值类型!!,通过结构体创建的变量中存的不是地址,而是数据。如果创建两个具有相同结构体类型的变量a,b,并将a赋值给b的话,a中的数据就会直接赋值给b(因为存的是数据而不是地址),然后有趣的是结构体变量的创建方式和对象的创建方式是一致的,但是存储结构体数据的内存空间是在栈区中开辟的,而存储对象的内存空间是在堆区中开辟的。
所以我们可以知道,用new创建只是创建一个内存空间,但并没有说是创建在那个内存区,真正作为分区辨识符的的是我们创建的数据的类型:
一.如果是值类型的话,那就在栈区中创建 --- 一般 int ,double ,float,char,short这些都是值类型(struct也是),其它的可以上网查
二.如果是引用类型的话,那就在堆区中创建 --- string , 自定义的类,系统提供的类都是引用类型
三.对于数组而言,如果数组中的元素是值类型那么数组在栈区中开辟,如果数组中的成员是引用类型,那么数组在堆区中开辟。
四,引用类型创建的变量中存的是地址,值类型变量中存的是数据
结构体其实也是一个类,只不过这个类占的内存空间比较小,可以放在栈区中,如果占的内存空间大的话我们就要创建类来放在堆区中了
(栈区特点:小而快 -- 内存空间小,数据操作快;堆区特点:大而慢,是栈区的反面
栈是以堆栈的形式存储数据的,而堆则是以随意划分的形式存储数据的)
4.重构又称为重新设计
列表![](https://i-blog.csdnimg.cn/blog_migrate/6f338b50dda6b6f6547d7fe0e475f839.png)
1.什么是集合类?
首先集合是由一个或多个确定的元素所构成的整体,这个整体有着不同的构建方式,于是就出现不同的集合,我们把这些不同的集合统称为集合类,列表就是这些集合类中的一种
2.列表又是什么呢?
列表其实就是数组的超级加强版,通过列表中我们可以很方便的查找,修改,排序数据,同时最重要的是列表中可以动态的增删数据。
1.列表的创建
注意列表的创建需要我们引入新的命名空间 --- 这个命名空间的引入现在visualStudio已经帮我们自动引用了,如果没有的话可以点击我们创建的List类型,点小灯泡,选择下面那个引入即可
然后创建列表的语法是:
List(列表类型)<列表中存放的数据的类型> 列表名 = new List<列表中存放的数据的类型>();
< > ----> 这两个箭头其实是一个新的语法,叫做泛型,后面会将。
2.列表在创建时的初始化方法
一.在最后面加个花括号,然后直接在花括号中写初始化值 --- 可以写任意多个
3.如何在列表中增删数据
语法:调用list对象中的Add方法 --- 注意本质上列表类型其实就是被人们创建的一个类,而我们创建的列表就是通过这个类实例化的对象。
添加数据的逻辑:
如果列表中没有数据,就直接添加然后顺次往后排
如果列表中有数据,则会添加到列表中最后一个数据后面
然后列表中也存在着和数组一样的索引,索引从0开始,放到列表中的数据也会被索引编号,第一个数据是0,然后是1,2....
然后列表访问和修改数据也是和数组一样通过索引来访问的,语法如下:
列表名[ 被访问的数据在列表中的索引 ]
在每一个列表对象中都有一个Count整型成员属性,这个count起到计数器的功能,当列表中没数据的时候count =0,往后每增加一个数据count就+1,然后这个cout我们只能读不能写
调用方式 : list.Count --- 就是对象调用属性的方式
列表内部的数据管理
1.列表的本质也是数组,列表相较于最原始的数组所拥有的各种方便功能都是人家帮我们在列表类中封装好的,我们直接用就行,不需要自己实现。
2.列表会通过count属性来记录当前自己的成员数组中的元素个数,当检测到元素个数达到一定值的时候,列表就会创建一个更大的数组,将旧数组的数据放入新数组后就会释放掉旧数组
3.列表中的数组的默认初始元素个数是0,这个初始元素个数我们是可以修改的,修改方式是在创建列表的时候,在最后的圆括号里输入我们像设置的初始元素个数。
或者我们可以通过列表的Capacity(容量,体积)属性来设置和获取当前列表的容量
调用语法: 列表对象名.Cpacity --- 这是一个set和get都可的属性(可写可读)
列表的个数则是通过count来获得,count则是一个只能读的属性
列表常用操作方法
1.index(索引值,从0开始的那个)
2.插入元素调用的方法Insert需要我们传入两个参数,一个是要插入的索引值位置,一个是插入的数据的值,插入之后,原本占着那个位置的元素及后面的元素都会被方法处理自动往后移一个身位
3.移除指定位置数据的RemoveAt()方法要传一个参数,就是要移除的位置的索引值
还有一个Remove()方法,也需要我们传一个参数,这一个参数是我们想要移除的数据的值,调用方法后,方法会将与我们传的值相匹配的第一个元素删除,然后就会停止
其它Remove啥的方法可以直接在输入的时候查看详情(在方法选择框处都有进行介绍的,我们到时选择需要的就可以了)
4.indexof()和 lastindexof()方法如果找不到我们输入的元素的话就会返回-1