#include <iostream>
namespace ns {
class Cls{
/*
* 知识点1:
* 如果不存在可见的声明,那么,友元声明具有将该函数或类的声明放入外围作用域的效果
* 即:类Cls在命名空间ns内内部定义,则没有另外声明的友元函数fun相当于在命令空间内ns中声明,
* 如下列16行所示
*/
friend void print(const Cls& cls);
public:
Cls(int e) :elem(e) {}
private:
int elem;
};
//void print(const Cls& cls); // 已经隐式声明了,不需要再声明
}
void ns::print(const ns::Cls& cls) {
std::cout << cls.elem<< std::endl;
}
void fun() {
ns::Cls cls(0);
/*
* 知识点2:
* fun接受: 1)类类型实参并 2) 与类隐式声明在同一命名空间中,所以使用它无需使用using声明
*/
print(cls);
}