c++继承时友元函数不是不能继承么?那为什么我在基类中的友元函数(重载<<)派生类还能用?

2024-12-12 00:35:41
推荐回答(1个)
回答1:

我想你是用的public继承吧?
建议你去看看Effective C++第三版,上面专门有将这个面向对象与继承的。

上面有句话说:public继承意味着is-a关系,也就是说,适用于基类的每一项东西也都适用于派生类,因为每一个派生类对象也是一个基类对象。

看这个程序:

#include
using namespace std;
class CBase
{
public:
int x,y;
public:
CBase( int a=0,int b = 0 ):x(a),y(b){}
friend ostream& operator << ( ostream& os,const CBase& c );
};
ostream& operator << ( ostream& os ,const CBase& c )
{
os< return os;
}
class CDev: public CBase
{
public:
int z;
CDev(int a,int b ):CBase(a,b),z(0){}
};

int main()
{
CBase c(4,5);
cout<
CDev d(2,3);
cout<}

你看是正常吗?它已经将派生类视为基类了。
修改这一句class CDev: public CBase
为:
class CDev: private CBase
你看还能通过吗?

所以,你的问题不是基类的友元被继承了,是你的派生类被识别为基类了。