2021年7月7日

摘要: 成员初始化列表的概念 在类的构造函数中,不在函数体内对成员变量赋值,而是在构造函数的花括号前面使用冒号和初始化列表赋值 效率 用初始化列表会快一些的原因是,对于类型,它少了一次调用构造函数的过程,而在函数体中赋值则会 多一次调用。而对于内置数据类型则没有差别。 阅读全文
posted @ 2021-07-07 00:33 超人不会灰啊 阅读(282) 评论(0) 推荐(0) 编辑
 
摘要: 一个类对象的地址就是类所包含的这一片内存空间的首地址,这个首地址也就对应具体某一个成员变量 的地址。(在定义类对象的同时这些成员变量也就被定义了) 对象的大小和对象中数据成员的大小是一致的,也就是说,成员函数不占用对象 的内存。这是因为所有的函数都是存放在代码区的,不管是全局函数,还是成员函数。要是 阅读全文
posted @ 2021-07-07 00:28 超人不会灰啊 阅读(193) 评论(0) 推荐(0) 编辑

2021年7月6日

摘要: 三大特性:继承、封装和多态 (1)继承 让某种类型对象获得另一个类型对象的属性和方法。 它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展 常见的继承有三种方式: 1. 实现继承:指使用基类的属性和方法而无需额外编码的能力 2. 接口继承:指仅使用属性和方法的名称、但是子 阅读全文
posted @ 2021-07-06 21:42 超人不会灰啊 阅读(384) 评论(0) 推荐(0) 编辑
 
摘要: 内存泄露 一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小 可以在程序运行期决定)内存块,使用完后必须显式释放的内存。应用程序般使用malloc,、realloc、 new等函数从堆中分配到块内存,使用完后,程序必须负责相应的调用free或delete释放 阅读全文
posted @ 2021-07-06 21:31 超人不会灰啊 阅读(399) 评论(0) 推荐(0) 编辑
 
摘要: 1) 必须使用成员初始化的四种情况 ① 当初始化一个引用成员时; ② 当初始化一个常量成员时; ③ 当调用一个基类的构造函数,而它拥有一组参数时; ④ 当调用一个成员类的构造函数,而它拥有一组参数时; 2) 成员初始化列表做了什么 ① 编译器会一一操作初始化列表,以适当的顺序在构造函数之内安插初始化 阅读全文
posted @ 2021-07-06 21:28 超人不会灰啊 阅读(84) 评论(0) 推荐(0) 编辑
 
摘要: 1) 赋值初始化,通过在函数体内进行赋值初始化;列表初始化,在冒号后使用初始化列表进行初始化。 这两种方式的主要区别在于: 1.对于在函数体中初始化,是在所有的数据成员被分配内存空间后才进行的。 2.列表初始化是给数据成员分配内存空间时就进行初始化,就是说分配一个数据成员只要冒号后有此数据成 员的赋 阅读全文
posted @ 2021-07-06 21:13 超人不会灰啊 阅读(177) 评论(0) 推荐(0) 编辑

2021年7月5日

摘要: 不能,malloc /free主要为了兼容C,new和delete 完全可以取代malloc /free的。 malloc /free的操作对象都是必须明确大小的,而且不能用在动态类上。 new 和delete会自动进行类型检查和大小,malloc/free不能执行构造函数与析构函数,所以动态对象它 阅读全文
posted @ 2021-07-05 00:49 超人不会灰啊 阅读(1440) 评论(0) 推荐(0) 编辑
 
摘要: 1、 new简单类型直接调用operator new分配内存; 而对于复杂结构,先调用operator new分配内存,然后在分配的内存上调用构造函数; 对于简单类型,new[]计算好大小后调用operator new; 对于复杂数据结构,new[]先调用operator new[]分配内存,然后在 阅读全文
posted @ 2021-07-05 00:47 超人不会灰啊 阅读(468) 评论(0) 推荐(0) 编辑

2021年7月4日

摘要: 1、 动态数组管理new一个数组时,[]中必须是一个整数,但是不一定是常量整数,普通数组必须是一 个常量整数; 2、 new动态数组返回的并不是数组类型,而是一个元素类型的指针; 3、 delete[]时,数组中的元素按逆序的顺序进行销毁; 4、 new在内存分配上面有一些局限性,new的机制是将内 阅读全文
posted @ 2021-07-04 10:31 超人不会灰啊 阅读(264) 评论(0) 推荐(0) 编辑
 
摘要: 1) 编译器并不是把函数模板处理成能够处理任意类的函数;编译器从函数模板通过具体类型产生不同 的函数;编译器会对函数模板进行两次编译:在声明的地方对模板代码本身进行编译,在调用的地方对 参数替换后的代码进行编译。 2) 这是因为函数模板要被实例化后才能成为真正的函数,在使用函数模板的源文件中包含函数 阅读全文
posted @ 2021-07-04 09:52 超人不会灰啊 阅读(562) 评论(0) 推荐(1) 编辑