数据结构与算法分析 学习笔记(二)
2016-06-24 22:37
267 查看
特别的构造函数语法与访问函数
C++拥有宽松的规则。通常,单参数构造函数定义了一个隐式类型转换(implicit type conversion),该转换会创建一个临时对象,然后调用对应的构造函数(我理解是单参数的那个构造函数,直接将右值作为参数进行构造了)初始化对象。使用explicit构造函数可以避免隐式转换。只进行检测而不改变对象的状态的函数成为访问函数(accessor)。改变对象状态的成员函数成为修改函数(mutator)
访问成员函数必须在圆括号后加上const,才能成为访问成员函数(因为不能修改 - -),试图修改,会在编译阶段报错。
C++细节
建议合并new操作和指针的声明,以避免空指针的存在。即T* p = new T();一般来说,简单类型(基本类型)使用按值调用,否则使用引用调用或常量引用调用。
如果返回值为类对象,使用常量引用返回是一种比较节省开销的返回值,但是一定要注意返回值不能使用函数内的局部变量,否则变量已经被销毁。
一个比较标准的赋值操作符重载
Person& operator=(const Person& x) { if (this != &x) { //standard alies test this->age = x.age; this->name = x.name; } return *this; }
可以通过把赋值操作符放在private里,已达到屏蔽=的目的。
要注意成员变量中有指针类型的情况,使用赋值操作符或者拷贝构造函数时,如果使用浅拷贝,很容易造成内存泄漏或者同一块内存地址释放两次。
当传递数组int arr[10]时的arr时,其实只传递了数组首元素的首地址,并没有包含数组的索引大小。
模板
如果一个模版函数和一个非模版函数都可以匹配的话,非模版具有优先权。如果有两个同样相似的模板,编译器会报错。(我理解是比如在多参数输入的时候,比如bool compare(type x, type)和bool compare(type x, Person y),模板类型type都可以用Person来替代,也就是第一个和第二个模板函数,虽然参数不同但是同样相似,编译器就会报错)
相关文章推荐
- java数据结构(四)——栈
- 剑指offer-数据结构:字符串(基础知识)
- 共同学习Java源代码--数据结构--ArrayList类(七)
- 剑指offer-数据结构:数组和指针(基础知识)
- vpp接口数据结构
- 树与二叉树
- 分布式系统的数据结构
- 复习(数据结构:java):线性表(数组):基础类设计
- 接口缓存不能放置在静态的数据结构存储
- 算法之路(一)----求最大子序列
- 数据结构与算法简记:选择排序
- 利用栈解析算术表达式
- 数据结构之链表和递归
- python微教程---第一季(第三集)---- 数据结构(列表)
- Nginx 模块自主开发四: 模块数据结构
- 数据结构的栈和堆的区别
- 《算法竞赛入门经典》学习笔记 2.3 文件操作
- 数据结构7.动态数组
- 数据结构之【树】--复习
- 《Java数据结构与算法》笔记-CH5-链表-3双端链表