类对象数组:
1. Account table[8];
2.用构造函数初始化数组(必须定义该类型相应的的构造函数)
Account table[8]=
{ Account(...),
Account(...),
Account(...),
............
}
3.
Account pooh_pols[3] = {
Account( "Woozle", 10.0 ),
Account( "Heffalump", 10.0 )
};
即数组初始化表被依次应用到数组的相继元素上对于那些没有显式构造函数实参集
合的元素用类的缺省构造函数初始化如果该类没有定义缺省构造函数则初始化表必须
为数组的每个元素提供构造函数实参
类成员初始化:
类成员的初始化显示仅在成员初始化表中,在其他地方叫做赋值。
多态:
当我们在C++中说到多态性时我们主要指基类的指针或引用可以指向其任意派生类的能力。
C++语言以下列几种方式支持多态性
1 通过一个隐式转换从派生类指针或引用转换到其公有基类类型的指针或引用
Query *pquery = new NameQuery( "Glass" );
2 通过虚拟函数机制
pquery->eval();
3 通过dynamic_cast 和typeid 操作符将在19.1 节详细讨论
if ( NameQuery *pnq =
dynamic_cast< NameQuery* >( pquery )) ...
我们通过把AndQuery NotQuery 和OrQuery 类型的每个操作数定义为Query*的指针
来解决我们的操作数表示问题例如
class AndQuery {
public:
// ...
private:
Query *_lop;
Query *_rop;
};
这两个操作数现在都可以指向从抽象Query 基类派生的任何类型的查询类类型无
论是现在已经定义的还是将来要定义的由于虚拟机制发生在程序执行期间的每个操作数
的计算过程与它的实际类型无关
_rop->eval();
在派生表中指定的类必须首先被定义好方可被指定为基类例如下面的Query 的前
向声明不足以使其被用作基类
// 错误: Query 必须已经被定义
class Query;
class NameQuery : public Query { ... };
面向对象设计的主要形式是一个抽象基类的定义以及它的公有派生类。
对于抽象基类,它并不做什么具体工作,一般来讲,我们只是使用抽象基类的指针和引用操作其派生类对象。(与抽象基类相对应的还有实体基类。)