私のコーディング スタイルでは、クラスは public の「生の」データ メンバーを公開するべきではなく、getter と setter のみを公開する必要があります (単純な 1 行のメソッドであっても)。
これは、コードが将来的にアップグレードされる可能性があり、単一行の方法がより複雑なものに拡張される可能性があるためです (または、いくつかのデバッグのみのビルド機能を追加して、いくつかの不変条件をチェックするなど)。クライアントに対して一貫したインターフェイス (「生の」データ メンバーを公開する場合、これは不可能です)。
接頭辞の使用を避けget_()
、データ メンバーを単純な (なしのget_...
) 名前を持つ「プロパティ」と見なすことができます。
class Shape
{
public:
....
COLORREF Color() const // Just Color() i.e. the property name, without get_...
{
return m_color;
}
private:
COLORREF m_color;
};
そして、次のようなクライアント コードを記述します。
Shape s;
COLORREF someColor = s.Color();
それは私にはうまく見えます。
セッターの場合、次のような構文を使用できます。
Shape& Color(COLORREF color)
{
m_color = color;
return *this;
}
次のようなクライアント コードを記述します。
Shape s;
s.Color(...).Draw(); // set color and draw shape
COLORREF
プロパティの型が(32 ビットの)よりも複雑な場合はDWORD
、次のようなパターンを使用できます。
std::wstring Name() const // getter
{
return m_name;
}
Shape& Name(std::wstring name) // setter
{
// Pass by value and move from the value (C++11 move semantics)
m_name = std::move(name);
return *this;
}