C++中“=”赋值和拷贝构造函数的使用的有关问题

C++中“=”赋值和拷贝构造函数的使用的问题
#include <iostream>
using namespace std;
class A
{
private:
int a;
public:
A()
{
a=0;
cout << "A's default constructor called.\n";
}
A(int i)
{
a = i;
cout <<"A's constructor called.\n";
}
void print()
{
cout << a <<",";
}
~A()
{
cout << "A's destructor called.\n";
}
int Geta()
{
return a;
}
};

class B:public A
{
public:
B()
{
b = 0;
cout << "B's default constructor called.\n";
}
B(int i, int j, int k):A(i),aa(j)
{
b = k;
cout << "B's constructor called.\n";
}
void print();
~B()
{
cout << "B's destructor called.\n";
}
private:
int b;
A aa;
};

void B::print()
{
A::print();
cout <<b<<","<<aa.Geta() <<endl;
}

int main()
{
B bb[2] = {B(10,15,20),B(1,2,3)};
for(int i = 0; i < 2; i++)
bb[i].print();
return 0;
}

为什么这里的B bb[2] = {B(10,15,20),B(1,2,3)};是赋值,而下面这个程序是调用拷贝构造函数?

#include <iostream>
#include <string>
using namespace std;
class A
{
int x;
char y[80];
public:
A()
{
cout << "Default\n";
}
A(char *s, int t)
{
strcpy(y,s);
x = t;
cout << "class A\n";
}
void list()
{
cout << y << x << endl;
}
~A()
{
cout << x << "Destructor\n";
}

};

void main()
{
A *p;
p = new A[3];
p[0] = A("red",10);
p[1] = A("black",15);
p[2] = A("white",8);
for(int i = 0; i < 3; i++)
{
p[i].list();
delete []p;
}
}

------解决思路----------------------
哥们,你这代码叫人从哪里开始看!
------解决思路----------------------
引用:
哥们,你这代码叫人从哪里开始看!

而且还把两块代码弄反了