关于 构造函数解决办法
关于 构造函数
代码如下:
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
代码如下:
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