Bjarne Stroustrupは、一度、プライベートまたはパブリックメンバー変数だけでほとんどのタスクに対処でき、 。私は他の場所でも同様の議論を聞いています。ここで`protected`を使用しない場合、サブクラスが基本クラスで定義された変数を効果的に使用する方法
class BaseClass
{
...
private:
int m_iAge;
double m_dSalary;
string m_strName;
bool m_bGender;
}
class SubClass : public BaseClass
{
...
}
は、上記のクラスの設計を考えると、一例であり、サブクラスはBaseClass
で定義された変数を使用することができますか?
Question1>なぜ我々はprivate
ではなくprotected
変数を持つことを好むでしょうか? BaseClass
が実装の詳細を隠して、それ以上の改善を容易にする理由はありますか?
Question2>変数はBaseClass
で定義されたアクセスをさせるためには、我々が(設定/取得)、パブリックアクセスを定義する必要があることに私には思えます。しかし、ゲッター/セッターは悪いです!したがって、2番目の選択肢は保護されたアクセス(get/set)を定義することです。どんな良いアイデア?
あなたは
getterとsetterが_evil_であるかどうかはわかりませんが、JavaやC++ではなく、多くの言語で取得できるプロパティ構文を使用することは非常にうれしいです。 –
Holub、Allen。なぜゲッターとセッターの方法が悪いのか? JavaWorld.com、2003年9月http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html – q0987
Javaでは、ゲッター/セッターは実際には悪ですが、C++では、 'operator =(T &&)'と '(T &&)'コンストラクタはそれをはるかにエレガントにします。これは、 'memcpy'の出入り時に特定のエンディアンを必要とするPOD型を扱う場合に特に便利です。 – moshbear