我想你是用的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<
}
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
你看还能通过吗?
所以,你的问题不是基类的友元被继承了,是你的派生类被识别为基类了。