#include<iostream>
using namespace std;
class ABC
{
public:
ABC(int a = 0, int b = 0)
{
this->a = a;
this->b = b;
printf("我是有参构造函数!\n");
}
ABC(ABC &c)
{
this->a = c.a;
this->b = c.b;
printf("我是copy构造函数!\n");
}
//成员函数
ABC addC(ABC &c)
{
//1.实例化t1
//2.实例化匿名对象
//3.t1调用构造函数给匿名对象赋值
//4.ti被析构
ABC t1(this->a + c.a, this->b + c.b);
return t1;
}
ABC& addC2(ABC &c)//返回一个引用,相当于自身
{
this->a = this->a + c.a;
this->b = this->b + c.b;
return *this; //把*(&调用者)回到了调用者元素
}
//成员函数
void PrintABC()
{
printf("t2->a:%d,t2->b:%d\n", this->a, this->b);
}
~ABC()
{
printf("我是析构函数!\n");
}
public:
int a;
int b;
};
//全局函数
//成员函数 转为全局函数 多了一个参数
void PrintABC(ABC *t2)
{
printf("t2->a:%d,t2->b:%d\n", t2->a, t2->b);
}
//全局函数
//全局函数转成 成员函数 少了一个参数
ABC addC(ABC &c, ABC &d)
{
//1.实例化temp
//2.实例化匿名对象
//3.temp调用构造函数给匿名对象赋值
//4.temp被析构
ABC temp(c.a + d.a, c.b + d.b);
return temp;
}
void main()
{
ABC a1(1, 2);
ABC a2(3, 4);
ABC a3;
//全局函数方法
a3 = addC(a1, a2);
//成员函数方法
{
ABC a4 = a1.addC(a2); //匿名对象直接转化为 t4(直接转化,不调用copy构造函数)
a4.PrintABC();
ABC t5;
printf("=====================\n");
t5 = addC(a1, a2);//匿名对象赋值给t5
t5.PrintABC();
}
system("pause");
}