继承类型 | 基类成员访问说明符 | 派生类成员访问说明符 |
public | public | public |
protected | private | |
private | inaccessiable | |
protected | public | protected |
protected | protected | |
private | inaccessiable | |
private | public | private |
protected | private | |
private | inaccessible |
子类中的友元函数只能通过子类对象去访问基类的protected成员
class Base {
protected:
int prot_mem = 10;
};
class Child : public Base {
public:
int getMember() { return prot_mem; }
friend int getMember1( Child child);
friend int getMember2(Base base);
};
int getMember1(Child child)
{
return child.prot_mem; //correct, can access
}
int getMember2(Base base)
{
return base.prot_mem;// error C2248: 'Base::prot_mem': cannot access protected member declared in class 'Base'
}