注册,提供接口
.操作系统.硬件厂商.就相应实现这些接口.将厂商,实现(驱动)
加入.
自然就拥有了功能.
#1 指针与引用
指针有一层间接
,引用,是直接
的.
#2 c++的转换
c++,尽量用自己的转,静转
,动转
,常转
,重转
双精 d=静转<双精>c/d;
常转
去除常易
属性.
不能传常对象
给非常
参数,可先常转
,动转
是向下转.失败抛异常.不能用于缺少
虚函数的类型上.重转
很难移植,在函数指针间进行转换.
c++不保证,以相同方式表示所有函数指针.
#3 不对数组使用多态
类继承的重要特性,可用基类指针/引用
操作派生类.
这种指针/引用
具有多态性.
好像还是可以.这个应该是类是引用类型
.
类是为了封装的.友元
会降低类的封装性
.
#7,8,都是符号 新/删
重写的注意事项.
#10,写符号 新
,就要写符号 删
.
这个新和删
是操作符
.写这两个函数,是隐藏,不是重载.新
申请空间,构造函数
在之上继续初化
.新
有一个保存大小的块,当类小时,会浪费大量空间.
需要小数据时,可重写符号 新/删
.申请一块大内存池.然后自己使用.不如一堆向量<整>
就完了.
#11 为动态分配内存类,声明拷贝/赋值
函数,避免浅拷贝
.即实现深拷贝
对指针,动态申请内存,放数据.
#15,符号=,返回*本
引用.并写一个深拷贝
.派生类还要考虑基类.检查给自己赋值的情况.
#18,类的接口要完整且最小.
#20,避免公
出现数据成员.
人家通过函数.我并不限制这点.
#21,尽量传引用,
#22,基类要有虚析构
函数.纯虚函数=0
#25,避免对指针/整数
的重载.
#33,内联缺点
目标代码体积增加,降低缓存命中率.
内联函数放头文件
,
#35,公有继承.
公有继承,表现的是是一个
.
#36,区分接口继承
与实现继承
,
接口是放公
,供外部调用.
实现是私
,是内部逻辑,
有时只希望子类继承接口
,有时可继承接口与实现
且允许改变.有时,子类同时继承,但不允许改变.
定义纯虚函数
,使派生类
仅继承
函数的接口
.
但纯虚函数
其实也可以提供定义
(即实现).
1.继承函数的接口/实现
,通过虚函数
来实现.
2.或者基类保护函数,提供一个默认实现.继承类中在其中使用它,并扩展.带默认实现
的纯虚函数
更安全.
3,声明非虚函数
,直接继承.
#37,不重新定义继承而来的非虚
函数.这叫隐藏.
#38,虚函数动态
,默认参数,静态绑定
.,重定义默认参数等于,重定义函数
静态类型
:程序中声明的类型,动态类型
:实际类型.动转
失败转空针
.
#40,分层.分层就像颗粒一样.
大颗粒在上层.
小颗粒在下层.
小颗粒就是一个个细小的功能体
.
#41,区别模板与继承.
依赖类的行为为继承
,依赖类的类型,则为模板
.
当对象类型不影响函数行为,用模板
.反之用继承
.
继承,就是在一个基础上搞事情
即扩展
.基
,就是基础
,在这上面继续搞事情.
模板,就是在一个模板上加点自定义
.拷贝和赋值
为私,防止拷贝/赋值
在基础类中,对实现类中可能用到的函数加保护
.
然后实现类
实现他们.这样,只需要实现这几个
保护函数,就可以实现不同功能
的实现类.
元<类 T>类 子:私 基{保护函数...};
#42,私有继承.
意味着用基类
实现,只继承实现,忽略接口
.
要注意类型安全
.
对于基类
,只作为其他类的实现
来使用.
#43,多继承.
带来复杂性,名字的二义性
#45,c++没运行时检测.要避免运行时错误
.
#47,非局部(全局,或含静
)静态对象,使用前初化.
函数内静态对象(局部静态对象)
将全局静态对象,转移至函数内(局部静态对象)
默认生成的析构为非虚
析构.取地址,默认返回本
针.默认拷贝/赋值
为浅拷贝
,按成员拷贝.
#48,重视编译器的警告.