在我的程序中,我有一個名爲Foo
的數據結構。該程序的一部分從一組參數構造Foo
,因此需要訪問變異方法。該程序的另一部分將只從Foo
讀取,因此不應該有權訪問變種方法。C++:一類的只讀和只寫版本的語義
什麼是最好的方法來實現這一目標,或者我錯誤地認爲類應該如何工作?我用這種方式在過去:
class FooR {
public:
int read() { return x; }
protected:
int x;
};
class FooRW : public FooR {
void mutate(int nx) { x = nx; }
};
可是這樣感覺就像你濫用繼承,我認爲這可能會造成混亂已經在計劃中的兩個部分兩個非常相似命名類。有更好的方法嗎?您能否以一些棘手的方式使用const
?
編輯: @jens指出,使用該程序的只讀部分const
引用應該工作,這讓我意識到要知道,我的數據結構實際上是一棵樹是很重要的,是這樣的:
class Foo {
public:
void splitNode();
Foo *getChild(int n) const; // const Foo?
private:
Foo *children[2];
};
是否有強迫const Foo
只const
引用返回到其子女的一種方式?
這看起來像一個反模式,如果我見過一個。 – CoryKramer
爲什麼不給'const Foo'給只讀部分,'Foo'給不是的部分? – Barry
如果您只需要在創建時寫入,您也可以擁有一個擁有「朋友」權限的工廠。建設者模式也可能工作,但我認爲這是一種工廠。 – Carcigenicate