麻烦哪位大虾帮我看下这个程序,为什么会有四个“A is default constructor called.”

来源:百度知道 编辑:UC知道 时间:2024/05/18 02:50:45
#include<iostream.h>
class A
{
public:
A()
{
a=0;
cout<<"A is default constructor called.\n";
}
A(int i)
{
a=i;
cout<<"A is constructor called.\n";
}
~A()
{
cout<<"A is destructor called.\n";
}
void print() const
{
cout<<a<<",";
}
int geta()
{
return a;
}
private:
int a;
};
class B:public A
{
public:
B()
{
b=0;
cout<<"B is default constructor called.\n";
}
B(int i,int j,int k);
~B()
{
cout<<"B is destructor called.\n";
}
void print();
private:
int b;
A aa;
};
B::B(int i,int j,int k):A(i),aa(j)
{
b=k;
cout<<"B is constructor called.\n";
}

这是因为你的B类中有个A类的成员变量,当定义第一个元素bb[0]时,编译器为bb[0]分配内存,要为A aa分配内存,所以要调用一次A的缺省构造函数,由于B bb[0]这个定义要调用B的缺省构造函数,所以先调用基类A的缺省构造函数,这样A的缺省构造函数被调用了两次,接着又定义B bb[1],所以总共调用了4次A的缺省构造函数。