关于 构造函数解决办法

关于 构造函数
代码如下:
class test
{
private:
int a;
int b;
public:
test(int x,int y):a(x),b(y){cout<<"test construct...."<<endl;}
test():a(0),b(0){cout<<"test default construct...."<<endl;}
void show(){cout<<"a:"<<a<<" "<<"b:"<<b<<endl;}
void show1(int x,int y){cout<<"x"<<x<<" "<<"y"<<y<<endl;}
~test(){};
};

class demo
{
protected:
test t;
private:
int a;
int b;
int c;
public:
demo(int x,int y,int z):a(x),b(y),c(z){cout<<"demo construct...."<<endl;}
void show(int x,int y){t.show1(x,y);}
};

int main() 
{
  demo tr(1,3,4);
tr.show(1,4);
return 0;
}

运行结果是:
test default construct :这个默认构造函数是在哪个地方调用的呢??
demo construct 
x1 y4

------解决方案--------------------
class demo
{
protected:
test t;//就是这个t构造的
private:
int a;
int b;
int c;
public:
demo(int x,int y,int z):a(x),b(y),c(z){cout<<"demo construct...."<<endl;}
void show(int x,int y){t.show1(x,y);}
};
------解决方案--------------------
和继承差不多的原理。test作为demo的成员,在
demo()//default constructor
中被自动初始化,即调用test()//default constructor