/*C++类的六个重要函数:
1、构造函数
(1)类型转换
2、拷贝构造函数
(1)用类对象初始化
(2)函数调用时的形参为 类对象
(3)函数返回的时候为类对象
3、赋值函数
(1)用类对象赋值
4、析构函数
5、普通对象的取地址符重载
6、const对象的取地址符重载
1、构造函数
(1)类型转换
2、拷贝构造函数
(1)用类对象初始化
(2)函数调用时的形参为 类对象
(3)函数返回的时候为类对象
3、赋值函数
(1)用类对象赋值
4、析构函数
5、普通对象的取地址符重载
6、const对象的取地址符重载
*/
#include <iostream>
using namespace std;
class Test
{
public:
/*构造函数 无显式定义调用默认的*/
explicit Test(int d = 0)/*必须显式调用*/
{
cout << "进入默认构造函数:" << this <<endl;
data = d;
}
/*拷贝构造函数 无显式定义调用默认的*/
Test(const Test& t)
{
cout << "进入拷贝构造函数:" << this <<endl;
data = t.data;
}
/*赋值函数 无显式定义调用默认的*/
Test& operator=(const Test &t)
{
cout << "进入赋值函数:" << this <<endl;
if (this != &t)
{
data = t.data;
}
return *this;
}
/*1、两个默认的运算符重载之一 普通对象的取地址*/
Test* operator&()
{
cout << "进入地址符的重载:" << this <<endl;
return this;
}
/*2、两个默认的运算符重载之二 const对象的取地址*/
const Test* operator&()const
{
cout << "进入const地址符的重载:" << this <<endl;
return this;
}
~Test()
{
cout << "进入析构函数:" << this <<endl;
}
int getdata()
{
return data;
}
private:
int data;
};
Test func(Test &t)
{
int Value;
Value = t.getdata();
return Test(Value);//临时对象,若是对象初始化则直接认为此临时对象就是新创建的对象
}
int main()
{
Test t;
int i = 0;
// cout << "t.data = " << t.getdata() << endl;
//
// t = (Test)100;/*先调用构造函数转为 类类型 然后再调用赋值函数对对象赋值*/
//
// Test t2=t;/*用类对象初始化,调用拷贝构造函数*/
// Test t3;
//
// t3 = t2 = t;/*类对象赋值,调用对象赋值函数*/
//
// cout << "t2.data = " << t2.getdata() << endl;
Test t1(100);
const Test t2 = t1;
Test *p = &t1;
const Test *pt = &t2;
cout << p->getdata() << endl;
return 0;
}