Week4(Boolan)

conversion function转换函数:将自身转换为别的类型

形式:operator+空格+转换类型{}

没有参数、返回类型(与转换类型相同所以不写),加const。转换类型不一定是基本的数据类型,并且一个class中可以有多个合理的转换函数。

non-explicit-one-argument ctor:将别的类型转换成自身

parameter与argument 一个实参argument就足够了

explicit明确,大多数情况用在构造函数前,避免编译器自动调用构造函数进行转换,避免ambiguous歧义错误

转换函数的应用,例如:代理proxy

pointer-like classes

1.智能指针:智能指针里一定含有一个普通的指针,而操作符*和 ->必须重载 

T* operator *() const {return *px;} 

T* operator->() const {return px;}    ->的特殊性,消耗完以后仍可以继续作用

2.迭代器:还必须重载++、--、!=、==,代表容器中的元素

模板参数

关于c++标准库

推荐书籍:《algorithms+data structure=programs》

c++中容器即数据结构,标准库还提供了很多常用的高效的算法,c也有标准库,最好把所有的算法和容器都使用一遍

了解编译器对c++2.0(c++11)的支持,有些需要经过设置才能支持,打印_cplusplus测试

variadic templates 数量不定的模板参数:如果递归调用函数本身,则会把参数分为一个和一包。当传入最后一个参数时,分为一个和零个,再调用另一个自己设计的同名函数。使用sizeof...(args)可以得到包中的参数个数。

auto

形式:auto 变量名

让编译器自动推导出变量类型。比如当变量值由函数赋值时通过函数返回类型推得。

ranged-base for

形式:for (decl(声明或定义的变量):coll(容器)){}

将coll中的每个变量依次赋值给decl,然后执行循环体

Week4(Boolan)_第1张图片
传值与传引用的两种用法

引用对编译器也是通过指针来实现的,引用必须设初值,并且一旦制定了代表的对象就不能再更改,引用的大小即它所代表的变量的大小。

Java中所有变量都是reference

Week4(Boolan)_第2张图片


Week4(Boolan)_第3张图片
Week4(Boolan)_第4张图片
reference同时具有用指针传递参数快和传值接口相同的两个优点;相同签名的函数如果共存,在调用时因为传值和传引用的接口相同所以会引起歧义;const加与不加是两个不同的函数所以能共存

object model对象模型:


Week4(Boolan)_第5张图片
继承+复合关系下的构造和析构的顺序可能并不属于c++的标准,属于实现部分,不同编译器实现手法不同,则顺序也不同

你可能感兴趣的:(Week4(Boolan))