关于C++友元函数的访问权限
友元函数与普通的非成员函数不同,它可以访问类的私有成员。
- 友元函数不是成员函数,因此不能使用成员运算符
.
来调用 - 但它与成员函数的访问权限相同
看到上面第二条我天真的理解成了,在友元函数定义中也可以向成员函数那样直接使用类中的变量呢,结果编译器就啪啪啪的打了我的脸。
我在一个<<
运算符重载友元函数中这样使用的类变量:1
2
3
4
5
6
7
8
9
10// friend functions
std::ostream & operator<<(std::ostream & os, const Stonewt & st)
{
if(st.status == STN)
std::cout << st.stone << " stone, " << st.pds_left << "pounds";
else if(st.status == PDS)
std::cout << st.pounds << " pounds";
else
std::cout << "Incorrect status";
}
其中条件判断中那句1
if(st.status == PDS)
编译器表示找不到变量PDS
的定义,于是我才意识到
毕竟你友元函数不是成员函数,毕竟你的定义也没有使用类似
Time::
一类的限定符,你只是个朋友而已啦,不能随便用人家的东西,虽然你是朋友,而且原型写在人家那里。所以你的优惠就是可以通过你的朋友知道人家的隐私,比如使用朋友的成员运算符看人家隐私啦,能给你看就不错咯~还算当你是friend。所以上面代码将
PDS
改成Stonewt::PDS
就可以了。还是朋友,还是要客气点。