c++在布局以及存取时间上主要的额外负担是由virtual引起,包括:1. virtual function机制(运行期绑定runtime binding)2. virtual base class机制(多次出现在继承体系中的base class,单一却被共享的实体)3. derived class和base class的转换(dynamic_case转换)
c++中:有两种数据成员:静态和非静态有三种成员函数:静态、非静态、虚函数。
C++默认构造函数:在需要的时候被编译器产生出来如:Class Foo{ public: int val; Foo* pNext;}; // 不会产生出默认构造函数
默认构造函数产生的条件(编辑器自动产生):1. 带有默认构造函数的成员类对象如:class Foo{ public: Foo(){}; Foo(int){...};};class Bar{ public: Foo foo; char* str;};2. 带有默认构造函数的基类3. 带有一个虚函数的类4. 带有一个虚基类的类class X { public: int i;};class A: public virtual X { public: int j;};class B: public virtual X { public: double d;};class C: public A, public B { public: int k; };
默认拷贝构造函数产生的条件(编辑器自动产生):1. 当class内含一个memeber object,而后者的class声明有一个拷贝口函数。2. 当class继承自一个base class,而后者存在一个拷贝构造函数时。3. 当class声明了一个多个virtual functions时。4. 当class派生自一个继承串链,其中有一个或多个virtual base classes时。默认拷贝构造函数产生的条件就是bitwise copy semantics无效的时候。
必须使用初始化列表的情况(初始化列表是在explicit user code之前执行):1.初始化一个reference member2.初始化一个const member3.调用一个base class的constructor,而它拥有一组参数时4.调用一个member class的constructor,而它拥有一组参数时