#include<iostream>
usingstd::cout;
usingstd::endl;
classCBase
{
public:
CBase()
{
}
virtualvoidDraw(constchar*str)=0;
};
classCRealClass:publicCBase
{
public:
CRealClass()
{
cout<<\"CRealClassconstruct\"<<endl;
}
virtualvoidDraw(constchar*str)
{
cout<<\"CRealClassdraw:\"<<str<<endl;
}
};
classCProxy:publicCBase
{
public:
CProxy():ptrFilePath(NULL)
{
pReal=NULL;
}
virtualvoidDraw(constchar*str)
{
if(pReal)
{
pReal->Draw(str);
}
else
{
}
}
CRealClass*LoadRealClass()
{
if(!pReal)
{
//createrealclassobjectsimplyusingconstructor
pReal=newCRealClass();
}
returnpReal;
}
///重载->运算符为何没有生效?????????????
CRealClass*operator->()
{
cout<<\"operator->becalled!\"<<endl;
returnLoadRealClass();
}
private:
//realobjectpointer
CRealClass*pReal;
constchar*ptrFilePath;
};
intmain(intargc,char*argv[])
{
//realclasswon’tbegeneratewhileusingproxy
CBase*ptrObj=newCProxy();
ptrObj->Draw(\"asdf\");
return0;
}
最新评论