C++拷贝构造函数以及运算符重载例子 (Linux 下编(3)

cout<<"\nc3.print();\n";
        c3.print();                                  //打印c3原来的值

cout<<"\nc1 = c1 + c2 + c3;\n";
        c1 = c1 + c2 + c3;                     //将c1加上c2再加上c3赋值给c1

        cout<<"\nc2 = -c3;\n";
        c2 = -c3;                                    //将c3求负后赋值给c2

cout<<"\nc3 = c2 - c1;\n";
        c3 = c2 - c1;                             //将c2减去c1赋值给c3

cout<<"\nc3.print();\n";
        c3.print();                                 //打印运算后c3的值
        cout<<endl;

return 0;
}
-------------------------------------------------------

Linux 下的Makefile文件内容
-------------------------------------------------------
exe=complex

all: $(exe).o main.o
        g++ -o $(exe) main.o $(exe).o
main.o: main.cpp $(exe).h
        g++ -g -c $< -o $@
$(exe).o: $(exe).cpp $(exe).h
        g++ -g -c $< -o $@

.PHONY: clean

clean:
        rm -rf $(exe) *.o
-------------------------------------------------------
编译程序:make
执行程序:./complex
执行结果:
-------------------------------------------------------
COMPLEX c1(1,2);
Default Constructing real: 1, image: 2 .           //调用默认构造函数创建对象c1,值为:1+2i
COMPLEX c2(2);
Default Constructing real: 2, image: 0 .           //调用默认构造函数创建对象c2,值为:2
COMPLEX c3(c1);
Copy Constructing real: 1, image: 2 .              //调用拷贝构造函数创建对象c3,值为:1+2i

c3.print();
1+2i                                                                 //打印c3原来的值为:1+2i

c1 = c1 + c2 + c3;
Default Constructing real: 0, image: 0 .          //调用默认构造函数创建临时对象temp1,值为:0
----- operator x + y start -----.                         //开始计算c1+c2,这个是调用c1的 “+” 运算符函数
this->real: 1, this->image: 2 .                         //c1,通过this指针隐式地将c1传递给c1的“+”运算符函数
other.real: 2, other.image: 0 .                        //c2,将c2传递给c1的“+”运算符函数
temp.real: 3, temp.image: 2 .                        //相加的结果保存在临时对象temp1中,所以temp1值为:3+2i
----- operator x + y end -----.                        //c1+c2计算结束,将结果temp1返回调用处
Default Constructing real: 0, image: 0 .   //调用默认构造函数创建临时对象temp2,值为:0
----- operator x + y start -----.                  //开始计算temp1+c3,这个是调用temp1的 “+” 运算符函数
this->real: 3, this->image: 2 .          //temp1,通过this指针隐式地将temp1传递给temp1的“+”运算符函数
other.real: 1, other.image: 2 .         //c3,将c3传递给temp1的“+”运算符函数
temp.real: 4, temp.image: 4 .          //相加的结果保存在临时对象temp2中,所以temp2值为:4+4i
----- operator x + y end -----.           //temp1+ c3计算结束,将结果temp2返回调用处
----- operator x = y start -----.          //开始做赋值运算:c1 = temp2;这里调用c1的“=”运算符函数
other.real: 4, other.image: 4 .         //赋值前temp2的值为:4+4i
this->real: 1, this->image: 2 .          //赋值前c1的值为:1+2i
other.real: 4, other.image: 4 .         //赋值后temp2的值不变,依然为:4+4i
this->real: 4, this->image: 4 .          //赋值后c1的值为:4+4i
----- operator x = y end -----.           //赋值运算结束,返回当前对象的副本,这里*this就是c1了
Copy Constructing real: 4, image: 4 . //通过拷贝构造函数创建c1的一个副本返回,c1副本的值为:4+4i
Destructing real: 4, image: 4 .             //析构c1的副本
Destructing real: 4, image: 4 .             //析构temp2
Destructing real: 3, image: 2 .             //析构temp1

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpyfs.html