background image

        {
                m_real = r;
                m_imag = 0.0;
        }

        

// 等号运算符重载

        

// 注意,这个类似复制构造函数,将=右边的本类对象的值复制给等号左边的对象,

它不属于构造函数,等号左右两边的对象必须已经被创建

        

// 若没有显示的写=运算符重载,则系统也会创建一个默认的=运算符重载,只做

一些基本的拷贝工作

        Complex &

operator

=( 

const

 Complex &rhs )

        {
                

// 首先检测等号右边的是否就是左边的对象本,若是本对象本身,则直接返回

                

if

 ( 

this

 == &rhs ) 

                {
                        

return

 *

this

;

                }
                
                

// 复制等号右边的成员到左边的对象中

                

this

->m_real = rhs.m_real;

                

this

->m_imag = rhs.m_imag;

                
               

// 把等号左边的对象再次传出

               

// 

 

目的是为了支持连等 eg:    a=b=c 

 

系统首先运行 b=c

               

// 

 

然后运行 a= ( b=c 的返回值,这里应该是复制 c 值后的 b 对象)    

                

return

 *

this

;

        }

};

下面使用上面定义的类对象来说明各个构造函数的用法:

void

 main()

{
        

// 调用了无参构造函数,数据成员初值被赋为 0.0

        Complex c1,c2;

        

// 调用一般构造函数,数据成员初值被赋为指定值

        Complex c3(1.0,2.5);
        

// 也可以使用下面的形式

        Complex c3 = Complex(1.0,2.5);
        
        

//    把 c3 的数据成员的值赋值给 c1

        

//    由于 c1 已经事先被创建,故此处不会调用任何构造函数