class A
{
public:
A( int x =0 )
//将之修改成A(int x),B(const A &p)报错error C2512: 'A' : no appropriate default constructor available
{
printf("Constructor A CaLL!\n");
a =x;
}
A(const A &p)
{
a=10;
printf("Fuzhi A is call!\n");
}
public:
int a;
};class B:public A
{
public:
B(const A &p)
{
b.a =p.a;
a=1;
printf("Fuzhi B is call!\n");
}
public:
int a;
A b;
};void main()
{
A*p =new B(7);
printf("%d\n",p->a);
printf("%d\n",((B*)p)->b.a);
printf("%d",((B*)p)->a);
}
{
public:
A( int x =0 )
//将之修改成A(int x),B(const A &p)报错error C2512: 'A' : no appropriate default constructor available
{
printf("Constructor A CaLL!\n");
a =x;
}
A(const A &p)
{
a=10;
printf("Fuzhi A is call!\n");
}
public:
int a;
};class B:public A
{
public:
B(const A &p)
{
b.a =p.a;
a=1;
printf("Fuzhi B is call!\n");
}
public:
int a;
A b;
};void main()
{
A*p =new B(7);
printf("%d\n",p->a);
printf("%d\n",((B*)p)->b.a);
printf("%d",((B*)p)->a);
}
当程序改成A( int x =0 ),运行结果是:
Constructor A CaLL!
Constructor A CaLL!
Constructor A CaLL!
Fuzhi B is call!
0
7
1Press any key to continue
这个Constructor A CaLL!怎么会调用三次呢?
2。 类型转换的一次,从int到A类型隐式转换
3。 B类的成员标尺A b的一次