#include <iostream>
#include <string>
using namespace std;
class Students04{
public:
int m_age;
Students04(int age){
this->m_age = age;
}
void showAge(){
cout << "年龄是: " << this->m_age << endl;
}
~Students04(){
cout << "析构" << endl;
}
};
// 利用智能指针管理new出来的students04对象的delete操作
class SmartPoint{
public:
Students04* m_stu;
SmartPoint(Students04* stu){
this->m_stu = stu;
}
~SmartPoint(){
if(this->m_stu){
delete this->m_stu;
this->m_stu = NULL;
cout << "智能指针析构"<< endl;
}
}
// 重载->
Students04* operator->(){
return this->m_stu;
}
// 重载*
Students04& operator*(){
return *(this->m_stu);
}
};
int main()
{
// 堆中申请空间
// Students04* stu1 = new Students04(18); // 显示法
// stu1->showAge(); //方法1:
// (*stu1).showAge(); //方法2:解引用法
// delete stu1;
SmartPoint sp(new Students04(18)); // sp 是个实例化对象 对象不是指针,不能用->符号,所以要重载 sp->
// sp 无法实现指针效果,再次重载->
// sp 是个实例化对象 对象不是指针,不能用->符号,所以要重载 sp->
// sp->->showAge(); // sp-> == this->m_stu
// this->m_stu->showAge();
// sp->->showAge();
// 系统认为太丑了,所以两组箭头间化为1组
sp->showAge();
// sp无法实现指针效果,再次重载*
(*sp).showAge();
return 0;
}