程序设计(一):类相关
1、 空类(不包含任何数据成员)sizeof值为1。
2、若类中包含虚函数,则类对象中隐藏一个指针vptr, 指向虚表vtbl。
3、若子类重新定义父类中虚函数A, 则子类对象从父类中继承的虚表中函数A的地址也相应更改为子类新定义函数地址。
4、每个成员函数调用都隐含this指针。 如:Foo obj; obj.test(); => Foo::test(obj); 例子中this指针指向obj。
5、64bit系统中, class Foo {int data;}; sizeof(Foo), sizeof(int) 结果是8, 4。因为需要考虑内存对齐。
6、类与类之间三大关系:
继承(inheritance) is-a ——▷表示
复合(Composition) has-a ◆——>表示
委托(Delegation) ◇——>表示
委托、复合之间区别:复合是类中成员包含对象, 委托是类中成员包含对象指针或引用pImpl。
7、pointer-like object, 像指针的对象。为什么要设计一个类像一个指针?可以看shared_ptr<>, 迭代器
8、function-like object, 像函数的对象。
9、泛化是一个特别大的概念。简单点讲就是类模板。但是里头包含了很多概念需要学习, class/member/function template、偏特化(partial specialization,基于个数/ 基于范围),模板模板参数(template template parameter)等等。
10、STL要熟练, 容器(Containers) 、迭代器(Iterators)、算法(Algorithms) 、仿函数(Functors)等。
11、const
12、explicit 只能作用与单一参数构造函数(带默认除外),用于表示显示调用构造函数。 如Foo { explicit Foo(int );}; 不能定义成Foo obj = 1;或 Foo obj; obj = 1;