1  #include  < iostream >
 2  #include  < string >
 3 
 4  class  A
 5  {
 6  public :
 7      A(  const  std:: string   & str )
 8      {
 9          m_szS  =  str;
10      }
11 
12      A(  const  A  & rhs )
13      {
14          m_szS  =  rhs.m_szS;
15      }
16 
17      A &   operator =  (  const  A  & rhs )
18      {
19           if  (  this   ==   & rhs )
20          {
21               return   * this ;
22          }
23 
24          m_szS  =  rhs.m_szS;
25           return   * this ;
26      }
27 
28      std:: string  m_szS;
29  };
30 
31  int  main()
32  {
33       // !< 带参数基本构造,非explicit
34      A a1( " SB " );
35 
36       // !< 不能通过基本构造完成,实质上调用的是对a1的拷贝构造
37      A a2  =  a1;
38 
39       // !< 验证赋值操作符
40      A a3( " SC " );
41      a3  =  a1;  //  here
42 
43       return   0 ;
44  }
45 

总结:
1.实例化一个对象的时候,如果用另一个已有对象对其进行赋值,实质上调用的是拷贝构造函数,如上述的a2。
2.对一个已实例化对象采用赋值操作符对其进行赋值,调用的是赋值操作符重载的函数,如a3。

写得有点仓促,如有不同意见,欢迎拍板!