定义流IO的友元函数很常见,但随着项目变大,一般都将将类定义在某命名空间内,这时,我们在该类中定义的友元函数和命名空间是什么关系?如果该友元函数在类的cpp文件中实现,是放在命名空间内还是放在命名空间外?另外,对于该实现的函数,是否还需要给出函数声明?也就是说,friend能否承担声明友元函数的责任?
头文件:
#include <ostream>
namespace ns_test
{
/*
* type
*/
class CTestFriend
{
public:
CTestFriend(int i):
m_int(i)
{
// TODO Auto-generated constructor stub
}
virtual ~CTestFriend();
friend std::ostream & operator << (std::ostream & os, const CTestFriend & obj);
private:
int m_int;
};
} /* namespace ns_test */
CPP文件
#include "CTestFriend.h"
namespace ns_test
{
CTestFriend::~CTestFriend()
{
// TODO Auto-generated destructor stub
}
std::ostream & operator << (std::ostream & os, const CTestFriend & obj)
{
os << obj.m_int << "\n"