假设我想要一个单独的子类,并且只有这个类继承自父类 并授予 Child 对 Fathers 数据成员的访问权限。除此之外,没有人应该从父亲那里继承到它的内部结构,因此我将父亲的数据保密
编辑:我选择不保护,因为我想隐藏数据。有些人提倡这是一种很好的做法,但也许它有点太教条了:(例如 http://drdobbs.com/184403867 中的 Herb Sutter)实际上,该类(class)应该只延长一次。因此,正如 Steve Jessop 指出的那样禁止继承是一种选择,但我认为这样做的成本(虚拟等)对于我需要的来说太过分了。
代码看起来像这样:
class Father{
friend class Child;
public:
//functions
private:
int mData;
}
class Child: public Father{
public:
void changeData(int val){mData=val;}
}
我是不是遇到了一些严重的麻烦,或者这是一个有效的决定,假设继承首先是一个好的决定。
最佳答案
这实际上并没有阻止任何其他人使用 Father
作为基类,它只是阻止他们访问 mData
如果他们这样做了。
如果那是你想要的(Child
有访问 Father
的特权,而其他类没有,而且 Child
碰巧还有一个基类 Father
是无关的),很好。
如果你另外禁止任何人使用 Father
作为基类(单独通过文档,或者使用虚拟基类的技巧),那么使用 friend
变得有点毫无意义。您还不如将 mData
设置为 protected 而不是私有(private)的,这正是 protected 目的。
关于c++ - 将友元与继承结合起来访问私有(private)数据成员是否可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8242419/