分類:[C/C++]
c++での質問です。
皆さんは、関数、戻り値、引数のconst指定をどのような基準で決めていますか?
自分の場合、
関数、戻り値・・・Getter関数のうち、メンバ変数の情報を書き換えないもの
引数・・・関数内で情報を書き換えない参照orポインタ
という感じにしていますが、次のような場合に困ってしまいます。
Flower {
public:
void setColor(int Color) {color=Color;}
int getColor() const {return color;}
private:
int color;
}
Garden {
public:
Flower* getFlower(int n) {return &flowers[n];}
private:
vector<Flower> flowers;
}
garden.getFlower(n)->setColor(WHITE); //庭のn番目の花の色を白に
このような操作を可能にする場合、getFlower()とその戻り値は非constにしなければなりません。
しかしそうなると、
bool IsAllFlowersWhite(Garden &granden) {
for (int i=0; i<garden.getFlowerCount(); i++)
{
if (garden.getFlower(i)->getColor()!=WHITE) return false;
}
return true;
}
のように内部情報を一切変更しないような関数の引数がconstにできなくなってしまいます。
キャストで非constにしたり、
const Flower* getFlowerConst(int n) constのようにconstなFlowerポインタを返す関数を作れば
解決できなくもないですが、スマートでない感が否めません。
何かよい方法がありましたら、ご教授下さい。
|