#include<iostream>
using namespace std;
class Test
{
public:
Test(int x, int y)
{
cout << "Test(int x, int y)..." << endl;
m_x = x;
m_y = y;
}
Test()
{
cout << "Test()..." << endl;
m_x = 0;
m_y = 0;
}
Test(const Test & another)
{
cout << "Test(const Test & another)..." << endl;
m_x = another.m_x + 100;
m_y = another.m_y+100;
}
void operator=(const Test & another)
{
cout << "=operator(const Test & another)..." << endl;
m_x = another.m_x + 100;
m_y = another.m_y + 100;
}
void PrintT()
{
cout << "m_x=" << m_x << ",m_y=" << m_y << endl;
}
~Test()
{
cout << "~Test()..." << endl;
}
private:
int m_x;
int m_y;
};
void test1()
{
Test t1(10,20);
Test t2(t1); // Test t1=t2;
}
void test2()
{
Test t1(10, 20);
Test t2;
t2 = t1; //调用=操作符
}
void func1(Test t) //Test t = t1; 调用拷贝构造函数
{
cout << "fun1() begin..." << endl;
t.PrintT();
cout << "fun1() end ..." << endl;
} //析构t
void test3()
{
cout << "test3 begin..." << endl;
Test t1(10, 20);
func1(t1);
cout << "test3 end ..." << endl;
}//析构t1
Test func2()
{
cout << "fun2() begin..." << endl;
Test temp(10, 20);
temp.PrintT();
cout << "fun2() end ..." << endl;
return temp; //匿名对象 = temp ; temp 就析构
}
void test4()
{
cout << "test4 begin..." << endl;
func2(); //返回来的匿名对象没有被使用,析构匿名对象
cout << "test4 end ..." << endl;
}
void test5()
{
cout << "test5 begin..." << endl;
Test t1 = func2(); //把匿名对象 起名字叫 t1
cout << "test5 end ..." << endl;
} //最后析构t1
void test6()
{
cout << "test6 begin..." << endl;
Test t1;
t1 = func2(); //调用=操作符
cout << "test6 end ..." << endl;
}
int main()
{
//Test t1(100, 200);
//Test t2 = t1;
//Test t3(t2);
//t1.PrintT();
//t2.PrintT();
//t3.PrintT();
// test1();
// test2();
// test3();
// test4();
// test5();
test6();
return 0;
}