派生类与基类的构造函数,基类的默认构造函数可以被隐式调用,但如果一个基类的所有构造函数都有参数(申明了除拷贝构造外的构造函数,则默认构造函数就没有了。),那么就必须显示调用其中的某一个,这时候,基类的行为恰恰就像派生类的一个成员,基类构造函数调用在派生类构造函数的初始化列表中。如:
Manager::Manager(const string& s, int d, int lvl)
:Employee(s, d), //初始化基类
level(lvl){}
基类和派生类还是属于不同的类,虽然派生类继承了基类的行为和数据,对于构造函数、拷贝构造函数、赋值操作符、析构函数都不会被继承,只是有可能被隐式调用。
多重继承的一种使用(有点类似于代理或者适配器):
class Ival_slider: public Ival_box, protected BBWindow{
public:
protected:
//覆盖BBWindow
private:
}
Ival_slider的界面是Ival_box,同时从BBWindow继承来用于实现Ival_box接口。从BBWindow protected继承,这样Ival_slider的使用者不能直接访问BBWindow定义的功能,而不用private继承,是为了使由Ival_slider派生出的类还能使用BBWindow。
一个系统展现给用户的应该是一个抽象类的层次结构(隐藏了实现细节),其实现所用的是一个传统的层次结构。
//判断{}是否成对出现,比栈的方法更加简单
count = 0;
while( *p )
{
if( *p == '{' ) count++;
if( *p == '}' ) count--;
if( count < 0 ) return ERROR;
p++;
}
if( count != 0 ) return ERROR;
return OK;