继承造成访问权限问题

在类继承中,广泛运用的protected成员,对外不可访问,但是对于友元和派生类是可以访问的。相较于private成员,protected对派生类更加的友好,因为它可以直接访问。相较于public成员,它无法被外部任何一个函数直接调用,保护了封装性。

 值得一提的是,即使派生类可以通过基类函数来修改派生类的值,但是秉承自己的事自己做原则,基类数据成员的初始化还是交给基类成员去做吧!当然基类有默认构造函数,你也可以自己注意初始化(如果不嫌麻烦的话,同时也是特别不建议这样做).

此博客接下来重点说明protected一个特别重要的性质:

派生类成员函数和友元只能通过派生类对象去访问基类数据成员,而无法通过基类对象访问数据成员。反之,基类成员函数和友元也无法直接访问派生类的数据成员!!!

如代码所示:

class Base
{
protected:
	int x;
};
class Derive:public Base
{
	//友元声明在任何地方没有影响
	friend void f1(Derive &D);
	friend void f2(Base &B);
};
void f1(Derive &D) { D.x = 100; }//correct
void f2(Base &B) { B.x = 100;  }//error 报错信息为:error C2248: “Base::x”: 无法访问 protected 成员(在“Base”类中声明)

猜你喜欢

转载自blog.csdn.net/qq_41657315/article/details/80922196