c++-2023-05-05

1、什么是标识符?变量、常量。为什么给标识符命名时要求开头不能使用数字?假如定义成int 1 = 1,将造成混乱。

2、为什么要有数据类型?为了方便分配内存。

3、在vs的c++编译器中,如果定义单精度变量时其初始值后没有加f,系统会默认为double类型。

4、c++中字符串的定义string str="hello",引入了新关键字string,和c中定义字符串char *str="hello"或者char str[]="hello"都不同。

5、在《46 数组-一维数组-冒泡排序》视频中,外层for循环应该理解成减少的、不需要参加排序的元素个数,内层for循环理解为每次大循环中需要两两比较的次数,这样外层循环构成因子i和内层循环的结合才有缘由。

6、指针和c++的引用不同在于引用不需要再单独开辟内存空间。

7、在c++编译器中结构体关键字struct可以省略不写,switch...case...语句中如果case语句存在多行,需要另加{}括起来才能保证编译器不报错。

8、由于值传递过程使用的是拷贝的副本,如果需要传递一个数组,该数组的每个元素都是一个结构体(这时结构体中可能会包含不同类型的数据),继续使用值传递的话就需要消耗大量内存,所以引出了地址传递存在的必要性。

9、重载后置++不能使用引用来接收,所以重载后置++时使用的形参使用了值传递。

10、对比在《27 类和对象-对象特性-深拷贝与浅拷贝》的14:30中也是深拷贝但是这里并没有出现释放检查而是在析构函数时按正规的释放m_Height,而在《42 类和对象-C++运算符重载-赋值运算符重载》的12:00中,为什么会有释放m_Age指针的操作?首先,在《27》中深拷贝解决的是对象初始化过程出现的问题,这时还没有对象,而在《42》中是已经存在有对象,深拷贝需要解决的是两对象间赋值过程出现的问题,其次,翻到《42》的06:24可以看到将要被赋值的p2对象它的m_Age指针已经初始化过并指向了20所在内存空间,所以后面要进行深拷贝之前需要先释放这个指向20的内存空间。

11、在《58 类和对象-多态-虚析构和纯虚析构》的08:00地方出现子类析构函数没有执行的现象其根本原因实际上是编译早绑定特性所造成的,只是视频里没有明确指出,所以在父类析构函数没有加virtual关键字之前是不会调用到子类析构函数的,因此动态运行过程中子类有使用new开辟新空间都得不到释放。

 12、在《60 类和对象-多态-案例3-电脑组装具体实现》的13:30处释放指针之所以用的是普通析构函数是因为computer类为普通类,既没有被任何子类所继承也没有作为子类去继承任何父类,并且也没有出现和《58》一样子类内使用new开辟新空间(因为computer根本就没有用子类),所以不需要采用虚析构。

13、在《19 职工管理系统-按照职工编号进行排序功能实现》的06:00选择排序和《46 数组-一维数组-冒泡排序》不同的是,选择排序是认定一个起始元素,这个元素保持不动,用该元素后面的所有元素与之比较,都比较完一遍过后再选定后面一个元素作为起始元素,再用该元素后的所有元素与之比较;而冒泡排序则是拿第一个元素和第二个元素比较,比完之后,拿刚比完得到的第二个元素和第三个元素比较,比完之后,再拿刚比完得到的第三个元素和第四个元素比较,依次类推。

posted @ 2023-05-05 18:25  migui  阅读(13)  评论(0编辑  收藏  举报