質問

私はC ++で、アクセサが定義された同じクラスのメンバ関数でアクセサ(get...())を使用すると良いプログラミングの練習であることを聞いたことがありますか?それは本当であるとそれが行われるべき?

は、例えば、この好ましい

void display() {
    cout << getData();
}

このようなオーバーます:

void display() {
    cout << data;
}

datadisplay()方法と同じアクセサが定義された同じクラスのデータメンバー...である。

私はあなたが同じクラス内回のアクセサロットを呼び出すだけではなく、直接データメンバを使用してする必要がある場合は特にことを行うためのオーバーヘッドを考えています。

役に立ちましたか?

解決

この理由は、あなたがgetData()の実装を変更した場合、あなたは直接dataにアクセスするコードの残りの部分を変更する必要がないことです。

パフォーマンス上のペナルティはありませんので、

そしてまた、スマートコンパイラは、(それは常にクラスの内部実装を知っているだろう)とにかくそれをインライン化されます。

他のヒント

これは依存しています。アクセサ関数を使用すると、「データ」は、苦痛が少ないの将来の変更を作ることができる抽象化レイヤを提供します。あなたはなまけ「データ」の値を計算したい場合たとえば、あなたはアクセサ関数内でその計算を隠すことができます。

オーバーヘッドについて - あなたはパフォーマンスのオーバーヘッドを参照している場合、それはおそらく微々たるものになります - あなたのアクセサはほぼ確実にインライン化されます。あなたはオーバーヘッドをコーディングを参照している場合は、[はい、それはトレードオフの関係で、あなたはそれがアクセサを提供するために、余分な労力の価値があるかどうかを判断する必要があります。

個人的に、私はアクセサは、ほとんどの場合、それだけの価値があるとは思わない。

はい、私はそれは、多かれ少なかれ、無条件に行われるべきだと思います。状態変数は、いくつかの基本クラスである場合、それは多かれ少なかれ常にprivateである必要があります。あなたはそれを保護することを可能にするか、公共の場合は、すべての継承された の直接それを使用します。順番にこれらのクラスは、あなたの同僚は、いくつかの他のプロジェクトで作成されたクラスかもしれません。あなたは突然、基本クラスでは約モックと、例えばリファクタリングすることを決定した場合その状態のすべてのユーザーが書き換える必要があり、より適切なものに変数名。

あなたが唯一のプログラマや、誰も使わないだろういくつかのコードを開発している場合は、

これはおそらく問題ではありません。しかし、すぐにサブクラスの数が成長し始めると、それは本当に毛深い得る可能性があります。お奨めの愛の透明性!

しかし、私はこの地球上で神々の最高の子ではありませんよ。時々私はカンニング、あなたが所有者クラスにいるとき)、私はそれが直接のプライベートデータにアクセスしても大丈夫だと思います。あなたは自動的にあなたがしている実際のクラスを変更していることを知っているので、それも、有益であるかもしれない。あなたが実際にそう説明します命名規則のいくつかの種類を持っていることを考えると、例えば末尾にアンダーといくつかの変数名:「someVariable _」

乾杯!

さて、氏Khuntは、オーバーヘッドはほとんどの場合、アクセサのために本当に微々たるものです。質問はないアクセサロジックが呼び出される必要がある、またはあなたがフィールドに直接アクセスする必要があるかどうかです。これは、個々の実装のための質問ですが、多くの場合には、大きな違いをすることはありません。

アクセサのための本当の理由は、他のクラスへのあなたのフィールドのカプセル化を提供することである - そして含むクラスについてはあまり

個人的に、私は余分な機能(取得し、すべてのメンバ変数ごとに設定)の数十を持ってしたくありません。私は、のデータを使用して、違った何かをするために必要な場合にのみ、ののgetData()のに変更します。我々は唯一のクラスにコードを変更することについて話しているので、それはあまりにも難しいことではありません。

それはあなたが最終的に私が思うあなたのデータメンバーがどう処理されるかに依存します。

これは高価なプロセスと誰かがそれを要求しない限り、あなたがしたくないものだった場合は、その後、なまけデータを取得するようなことを行うことができアクセサでそれを包むことで。一方、あなたはそれが常にダムビルトイン型になりますので、私はそこにアクセサを通過するのいずれかの利点を見ることができないことを知っているかもしれません。私が言うように、それはメンバーに依存します。

私の心には、この質問の最も重要な側面は、それがコードが読みやすく、したがって、保守が作るんですか?個人的に私はそれは私がこれをしないだろうんとは思わない。
ただこれを行うには確かにあなたがプライベートアクセサを追加することはありません、それはcnutsになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top