C++类继承的有关问题

C++类继承的问题
这是我在书上看到的一段在验证调用构造和析构函数的顺序程序:
#include <iostream>
using namespace std;
class X
{
public:
X(){
cout<<"X is constructed"<<endl;
}
~X(){
cout<<"X is destructed"<<endl;
}
};
class A
{
int a;
X x;
public:
A(int i = 0):a(i){ //基类构造函数...
cout<<"A is constructed"<<endl;
}
~A(){
cout<<"A is destructed"<<endl;
}
};
class Y
{
int y;
public:
Y(int i = 0){
y = i;
cout<<"Y is constructed"<<endl;
}
~Y(){
cout<<"Y is destructed"<<endl;
}
};
class Z
{
int z;
public:
Z(int i = 0){
z = i;
cout<<"Z is constructed"<<endl;
}
~Z(){
cout<<"Z is destructed"<<endl;
}
};
class B:public A
{
int b;
Y y; //派生类组合对象
Z z;
public:
B(int j = 0):A(1),z(j),b(j),y(j){ //派生类构造函数,后面为内嵌对象列表...@
cout<<"B is constructed"<<endl;
}
~B(){ //派生析构函数
cout<<"B is destructed"<<endl;
}
};
int main()
{
B b;
return 0;
}
调用顺序我知道,问题是里面的:A(int i = 0):a(i)和B(int j = 0):A(1),z(j),b(j),y(j)我看不懂,冒号后面的是什么意思啊,我把书的前前后都翻了一遍也没找到为什么要这样写,而且我发现把冒号后面的东西去掉后程序照样能执行,既然是这样那为什么要加这些呢,加了又有什么作用啊?求大侠指导,多谢了!

------解决方案--------------------
那个是初始化吧…
------解决方案--------------------
比如下面这句:

A(int i = 0):a(i){ //基类构造函数...

就是用i的值初始化成员变量a
------解决方案--------------------
初始化列表
------解决方案--------------------
那说明你C++入门的书没看啊,初始化,既可以达到变量初始化,有时候还可以达到函数初始化的功能,非常方便。
------解决方案--------------------
那是对于你类对象创建时,对象中的数据赋值的操作。
也就是初始化操作。
这个东西也可以扔到构造函数中写。
比如:
class A
{
int a;
public:
A(int i = 0):{ 
a = i;
}
~A(){
}
};
它们的效果是一样的。
初始化的意义在于,构造对象时给这个对象的数据一个期望值。
当然,如果你不写的话,也没没有问题的,编译器会根据自己的编码规则决定,
是否为你的成员数据付上一个默认值。
------解决方案--------------------
类的初始化列表