私はiphoneプログラマーだとどのようにゲッターとセッター作品の道を知っている。(このプロパティおよび合成)ゲッターや他の言語でセッター
しかし、私は他の言語に精通していないですし、私があればということを知ってほしいですそのクラスのオブジェクトを作成することによってそれにアクセスする、C++ &のような言語で変数を作成します。
システムは自動的にそのためのゲッターとセッターを作成しますか?
または私は余分な作品をする必要がありますか?
私はiphoneプログラマーだとどのようにゲッターとセッター作品の道を知っている。(このプロパティおよび合成)ゲッターや他の言語でセッター
しかし、私は他の言語に精通していないですし、私があればということを知ってほしいですそのクラスのオブジェクトを作成することによってそれにアクセスする、C++ &のような言語で変数を作成します。
システムは自動的にそのためのゲッターとセッターを作成しますか?
または私は余分な作品をする必要がありますか?
C++には機能がありませんが、残念なことにgetterとsetterを手動で記述する必要があります。
言語はこの種のもののためのサポートのないようなものを提供しないので、あなたはより良い品質のコードを生成するために従う必要がある親指のいくつかのルールがあります:
すべてのメンバ変数は、非パブリックにする必要があります。アクセスする必要がある場合は、ゲッターやセッターを作成してください。これにより、後でその変数にどのようにアクセスするかを簡単に変更することができます。
インターフェイスの一部である(つまり、表示する必要がある)メンバーだけがゲッター/セッターを持つ必要があります。あなたのクラスのすべてのメンバのgetter/setterのペアを作成してカプセル化と呼んではいけません。
変数にセッターまたはゲッターが必要な場合は、自動的に他の変数も必要であるとは限りません。基本的には、必要な場合にだけ追加します。新しいものを追加するのは簡単ですが、その機能を使用するコードを既に取得している場合は削除するのは難しいです。一般的に
、ここではゲッターとセッターは、C++での作業方法は次のとおりです。
class Person
{
public:
const std::string& name() const {
return name_;
}
void name(const std::string& name) {
name_ = name;
}
private:
std::string name_;
};
int main()
{
Person pers;
pers.name("John");
std::cout << pers.name();
return 0;
}
多くの人々がそれらの機能getName()
とsetName()
に名前を付けたいが、私はこのようにそれを持っていることを好みます。また、常にゲッターを作ることを忘れないでください。const
(例:const std::string& name() const
の末尾)—これは、関数がPerson
オブジェクトを変更しないことをコンパイラーに通知します。
編集:ご覧のとおり、C++ゲッターとセッターでは、他の方法とまったく同じように、特別なことは何もありません。
を独自のメソッドを宣言し、コーディングする必要が
C++でのゲッター/セッターの概念がありません(それが内蔵されてのObjective-Cと比較して)
手動で行う必要があります(通常は悪い考えです)。
悪い考えは? –
ゲッター/セッター。彼らは実装の詳細を公開し、クラスとそのユーザーとの間の緊密なつながりを作り出します。内部状態を変更して戻すのではなく、オブジェクトに作業をさせておくのが最善です。 –
C++にはgetter/setterという概念がありますが、自動化されたものはありません。 –
なぜあなたは名前を公開する必要がありますか?印刷するには?その後、ストリーム運営者を友人にします。名前を公開する必要はありません。あなたはあなたが決して必要ではない場合でも維持する必要があるあなたのクラスへの緊密なカップリングを作成しています。 –
@ LokiAstariちょっとした例です。とにかく、私はそれについて何も読めないなら(僕はゲッターを持っていません)、クラスはどんな使い方ですか? –
メソッドを介してクラスに対して実行可能なアクションを公開します。インターフェイス以外のものに実装を公開する理由はほとんどありません。 –