派生类构造函数小疑点

派生类构造函数小问题
如果我哪句话错误了请指正,谢谢。

派生类的对象创建时,以此运行基类构造函数、派生类构造函数。删除该对象时依次执行派生类析构函数、基类析构函数。是这样的吗?

C/C++ code

class B //基类
{protected : 
    int amount ;
public:
    B (int n=0):amount(n){};//基类的带初始化列表的构造函数。其将 参数0 赋值给 变量amount .
}



C/C++ code

class D : public B//public 继承了基类B
{ 
public:
    D (int n):Base(n){};//派生类构造函数。其将n这个参数赋值给了base类,也就是说n是个基类的对象?

}



------解决方案--------------------
第二段代码中,下面的话严格地说是不对的。
//派生类构造函数。其将n这个参数赋值给了base类,也就是说n是个基类的对象?

D (int n):Base(n)的意思:
1. 因为要创建派生类对象,首先要调用基类构造函数,而基类Base由于已经自定义了一个构造函数,因此,它就不再存在缺省的构造函数了,因此在这里要制定基类的构造函数,否则派生类无法构造;
2. Base(n)在这里的意思是,向基类的构造函数传递一个int类型的参数。

3. 楼主举的这个例子情况有点特别。Base的构造函数只有一个int参数,那么就可以将int隐式地转换成Base类型的数据,关于这一点你可以参考下面这篇文章:
隐式类型转换和explicit关键字的作用