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);
}

解决方案 »

  1.   

    各位大小个解释一下以上错误的原因,谢谢!
    当程序改成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.   

    1。 构造B的时候调用基类的一次
    2。 类型转换的一次,从int到A类型隐式转换
    3。 B类的成员标尺A b的一次