Mar*_*tin 1 c++ inheritance encapsulation friend
假设我想要一个单独的Child类,并且只有这个类继承自Father并授予Child访问Fathers数据成员的权限.除此之外,没有人应该从父亲继承到其内部,因此我将父亲的数据保密
编辑:我选择了保护,因为我想隐藏数据.有些人认为这是一种良好的做法,但也许它有点过于教条:(例如,Herb Sutter在http://drdobbs.com/184403867)实际上这个课程应该只延长一次.因此,史蒂夫杰西普指出禁止继承将是一种选择,但我认为其成本(虚拟等)对我所需要的东西来说太过分了.
代码看起来像这样:
class Father{
friend class Child;
public:
//functions
private:
int mData;
}
class Child: public Father{
public:
void changeData(int val){mData=val;}
}
Run Code Online (Sandbox Code Playgroud)
我在这里遇到了一些严重的麻烦,或者这是一个有效的决定,假设继承是一个好的决定.
这实际上并没有阻止其他任何人使用它Father作为基类,它只是阻止他们访问mData它们.
如果这是你想要的(Child具有特权访问权限Father,其他类没有,并且Child碰巧也有基类的事实Father是无关的),那很好.
如果你另外禁止其他任何人使用它Father作为基类(通过单独的文档,或使用虚拟基类的技巧),那么使用friend变得有点无意义.你可能只是mData保护而不是私有,这正是受保护的.