替代友情继承的用例

时间:2013-11-16 23:13:03

标签: c++ inheritance friend

我有一个数据结构,有两个类访问它:

   class Foo {
     public:
       void set(double foo);
       double get();
   };

   class FooWriter {
     Foo bar;
     void setFoo() { bar.set(42); }
   };

   class FooReader {
     Foo *baz;
     double getFoo() { return baz->get(); }
   };

我想限制FooReader读取Foo,并且只允许为FooWriter设置。私有集函数和朋友类是一个选项但不幸的是我有很多FooWriter的子类,并且由于友谊不能被继承,我不想将它们全部列为朋友。在朋友FooWriter超类中使用受保护方法绕过封装是另一种选择:

   class Foo {
       void set(double foo);
     public:
       double get();
       friend class FooWriter;
   };

   class FooWriter {
     Foo bar;
     protected:
     void setFooBackdoor(double value) { bar.set(value); }
   };

   class subFooWriter {
     void setFoo() { setFooBackdoor(42); }
   };

但有些人会认为这是糟糕的设计。我还在这里读到,如果你需要友谊继承,你的设计中有一个缺陷,所以我很好奇,这个问题的正确解决方案是什么。

0 个答案:

没有答案