C++友元访问的问题,高手请进,急~~~~

来源:百度知道 编辑:UC知道 时间:2024/05/29 00:27:45
#include <iostream.h>
class A
{
protected:
int a;
public:

A(int x){ a=x;}

};

class B:public A
{

};

class C: public B
{
friend int func(B &pt);
};

int func(A &pt)
{
pt.a++;
return pt.a;
}

void main()
{
A a(3);
cout<<func(a)<<endl;
}

一个派生类的友元可以访问基类的公有和保护成员(书上是这么写的)
但为什么出现访问不了的情况?能举例说明一下吗?
1、我调试过可以我的Visual c++编译器支持友元访问 其声明的类中所有成员例如:class A{private: int i; public: x();} 这个X()函数可以访问 i
2、不明白所谓的跨类访问,如果跨类访问不可能,那继承还有什么用。

有些c++编译器不支持友元访问其保护成员,但公有成员应该是可以访问的,你把int a的访问类型改成public就可以了

不是友元的问题,是因为一个类的成员函数不能直接访问它的基类的基类(也就是跨类访问),也就是C类不能直接访问A类的成员