【侯捷】C++程序设计II--兼谈对象模型
本系列相关链接:
【侯捷】C++11
0. 课程目标
包含泛型编程、对象模型,共有25小节;
(
学习视频观看顺序如下,第一行为前序号,第二行为后序号:
14 17 22 24 18 21 16 19 20 26 35 34 28 36 25 27 33 32 30 29 31 23 37 38 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 19(1) 20 21 22 23 24
)
关注内容如下,其中c++11的部分见另一个博客;
其中泛型编程即模板技术;
对象模型包括this指针、虚指针、虚表、虚机制、虚函数及多态;
1. 转换函数
1.1 operator type() const
class转换出去:
数据类型转换操作符的重载,没有返回值类型,通常末尾加const;
转换进class来:?
构造函数;
1.2 explicit
non-explicit-one-argument ctor,只有一个无缺省值的构造函数,如果不加explicit ,则可能发生自动类型转换继而调用构造函数;
如果不想允许,则需要加explicit;
2. pointer/function-like class
例如,智能指针、迭代器;
也就是必须由*操作符、->操作符;
2.1 智能指针
template<class T>
class shared_ptr{
public:
T& operator*() const {
return *px; }
T* operator->() const {
return px; }
shared_ptr(T* p) : px(p) {
*pn = 0; }
private:
T* px;
long* pn;
};
另外,操作符->有特殊功能,也就是会继续指下去;
2.2 迭代器
除了*操作符、->操作符,还需要设计++、–等若干操作符;
这里荷包蛋表示迭代器;
T& operator*() const {
return (*node).data; }
T