类的友元函数说明:
声明在类内,定义在类外,
不能直接访问类的成员函数,可以通过类的实例访问,但是此时就部分private,还是public
const的重载在c++的重载封装中非常常见并且很实用,在可用const的private函数部分尽量实用.
友元重载一定必须是有至少一个参数是类自身的实例参数
友元函数大多实用const的参数,单数由于不是类的成员函数所以是不能通过const参数构成重载
重点说明iostream的<<, >>的重载,见代码部分
补充说明:但在导出类中使用了友元函数,必须在每个声明的友元函数的最前面加上__declspec(dllexport),因为他是类外的全局函数,所以导出函数的写法是在每个导出函数的头部特别的加上导出说明符..
DLL_STRING friend istream& operator>>(istream &In,CMyString &obj);
DLL_STRING friend ostream& operator<<(ostream &out,CMyString &obj);
DLL_STRING friend bool operator==(const char *pstrSrc,const CMyString &Obj);
<pre name="code" class="cpp">DLL_STRING istream& operator>>(istream &In,CMyString &obj)
{
char szbuf[255] = "";
In>>szbuf;
obj = szbuf;
return In;
}
DLL_STRING ostream& operator<<(ostream &out,CMyString &obj)
{
out<<obj.getStr();
return out;
}
DLL_STRING bool operator==(const char *pstrSrc,const CMyString &Obj)
{
return Obj.strCmp(Obj.getStr(),pstrSrc);
//return Obj == pstrSrc;
}
以上结论是通过代码的实现部分总结得出的,并没有按照书本来说明,如果有同学在自己实现部分又不一样的结果,希望说明,大家一起探讨,,