关于什么时候调用哪种构造函数

关于什么时候调用哪类构造函数
C/C++ code

#include <iostream>
using namespace std;

class A
{
public:
    A()
    {
        m_a = 0;
        cout << "默认构造" << endl;
    }
    A(int i)
    {
        m_a = i;
        cout << "参数构造" << endl;
    }
    ~A()
    {
        cout << "析构" << endl;
    }
    A(const A& a)
    {
        cout << "复制构造" << endl;
    }
    A operator=(const A& a)
    {
        cout << "拷贝构造" << endl;
        return a;
    }
private:
    int m_a;
};
A foo(A a)
{
    return a;
}

int main()
{
    A a(100);
    A tmp;
    tmp = a;
    return 0;
}


C/C++ code

参数构造//明白
默认构造//明白
拷贝构造//明白。。。
复制构造//费解
析构
析构
析构
请按任意键继续. . .

C/C++ code

int main()
{
    A a(100);
    A tmp = a;//这句为什么没有拷贝构造,复制构造是怎么来的。。
    return 0;
}


参数构造
复制构造
析构
析构
请按任意键继续. . .

期待大神指点。。





------解决方案--------------------
C/C++ code

A a; //缺省构造
A b = a; //拷贝构造 
A c(b); //拷贝构造
b = a; //赋值拷贝,不叫构造。构造指实例化,说明尚未创建过。

------解决方案--------------------
楼主,你还是立即扔了你的破教材,换本好点的吧。

能把赋值叫成构造的破书,还是不要看了。

另外,没有告诉你 A tmp = a;是构造,不会调赋值的教材,也不要买。
------解决方案--------------------
C/C++ code
A tmp = a; // 等价于 A tmp(a); 调用 A(A const&)

------解决方案--------------------
C/C++ code

#include <iostream>
using namespace std;

class A
{
public:
    A()
    {
        m_a = 0;
        cout << "默认构造" << endl;
    }
    A(int i)
    {
        m_a = i;
        cout << "参数构造" << endl;
    }
    ~A()
    {
        cout << "析构" << endl;
    }
    A(const A& a)
    {
        cout << "复制构造" << endl;//拷贝构造
    }
    A operator=(const A& a)
    {
        cout << "拷贝构造" << endl;//重载赋值操作符
        return a;
    }
private:
    int m_a;
};
A foo(A a)
{
    return a;
}

int main()
{
    A a(100);
    A tmp;
    tmp = a;
    return 0;
}