C++ 友谊继承用例的替代方案
我有一个数据结构,有两个类访问它:C++ 友谊继承用例的替代方案,c++,inheritance,friend,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
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的设置。私有集函数和friend类将是一个选项,但不幸的是,我有很多FooWriter的子类,而且由于友谊不能被继承,我不想把它们都列为朋友。使用friend 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); }
};
有些人会认为这是一个糟糕的设计。我在这里也读到,如果你需要友谊传承,你的设计中有一个缺陷,所以我很好奇,这个问题的正确解决方案是什么 Foo在实际的代码中有成员,但我将它们移出以获得一个简短的示例。