もちろん、希望する構文を利用できるようにする最も簡単な方法は、次のよう_radius
に public メンバーを作成することradius
です。
class circle
{
public:
double radius;
}
これで、次のように使用できます。
circle c;
c.radius = 10.0;
ただし、コードの記述方法 (または C# での記述方法) のみに基づいてそのような決定を下すべきではありません。すべてのメンバーについて、次の点について検討することをお勧めします。
メンバーを直接設定するのは理にかなっていますか? おそらく、メンバーはオブジェクトの状態のプライベートな部分であり、他のメンバー関数の影響を受けます。次の例を考えてみましょう。実際に公開したいインターフェースは、 のサイズを増やす単なる関数ですcircle
。
class circle
{
public:
circle(double radius, double delta = 1.0)
: radius(radius), delta(delta) { }
double increaseSize() {
radius += delta;
return radius;
}
private:
double radius;
double delta;
}
不変条件を適用する必要がありますか? おそらく、circle
負の半径を持つ a は存在しないと判断したとします。指定された新しい半径をチェックして 0 より大きいことを確認するメンバー関数を使用して、これを強制することができます。
インターフェイスを介してメンバーの別の表現を提供しますか? メンバーとして半径を維持したいcircle
場合もありますが、クライアントが知りたいのはそのエリアだけです。radius
非公開にしてから、次のgetArea
ような関数を提供できます。
class circle
{
public:
circle(double radius)
: radius(radius) { }
double getArea() {
return PI * radius * radius;
}
private:
double radius;
}
現時点では上記の点のいずれにも当てはまらない可能性がありますが、将来的には当てはまる可能性があります。この先見の明がある場合は、getter 関数と setter 関数を今すぐ提供することをお勧めします。これにより、クライアントが使用するインターフェイスが後で変更されなくなります。
getter と setter の別の命名スキームとして、2 つのオーバーロードされた関数 (1 つは設定用、もう 1 つは取得用) を単純に持つことは非常に一般的です。
class circle
{
public:
void radius(double); // Set the radius
double radius(); // Get the radius
private:
double radius;
}