0
class ABC{
     public :
      int a;
     public :
      int getData(){
        return a;
      }
     }
     void main()
     { 
       ABC abc;
       cout<< abc.a;    //1
       cout<<abc.getData();//2
     }

変数"a"にアクセスしている場合、コンパイラがアクセスするのにかかる時間が短くなります'a'。最初のケースだと思いますが、よくわかりません。

4

3 に答える 3

1

2 つの方法は厳密には同等ではありません。

  1. メンバーに直接アクセスすると、メンバー自体の値が読み取られます。
  2. get メソッドは変数のコピーを返すので、そのコピーから読み取ります。

パフォーマンスに関しては、コピーが含まれないため、もちろん #1 の方が高速になるはずですが、最新のコンパイラのほとんどは、コピー省略を適用して、作成されている余分なコピーを削除します。

パフォーマンスではなく、組織/機関で従うコーディング ガイドラインの統一性を考慮する必要があります。

于 2013-07-24T05:56:07.383 に答える
1

それはすべてコーディングスタイルです。プライベートメンバーを持つことは、外部エンティティが直接アクセスして変更しないようにするためのセキュリティ対策にすぎません (constセキュリティバリアとして使用される変数を宣言するのと同じ概念のようなものです)。パブリックアクセサーはメンバー値にアクセスするために使用される関数であり、パブリック修飾子は関数を介して値を変更するために使用されます。それは単なるコーディング規約です。コピーが作成されないため、関数ではなくメンバーを直接渡す方が高速です。

于 2013-07-24T06:50:25.147 に答える
0

私はそれを次のように言います:

  • 単に変数を設定/返す以外にアクセサーに何かがある場合 (たとえば、範囲チェックなど)、変数は完全に非公開にする必要があります。これは、この追加コードが実際に実行されることを保証する唯一の方法です。

  • 変数を照会可能または設定可能にしたくないために必要なアクセサーが 1 つだけの場合は、変数もプライベートにする必要があります。

  • バニラのゲッターとセッターの両方を定義する場合は、変数をパブリックにしてアクセサーを忘れても安全だと思います。とにかく、変数は事実上公開されています。この場合、アクセサーは冗長なコードになるだけなので、コードを肥大化させるべきではありません。また、後で public 変数を private にするのは簡単です。これは、コンパイラーが順応する必要のあるすべてのコード行を忠実にリストするためです。

要するに、デフォルトでプライベート変数を使用し、カプセル化に穴を開けるため、作成するすべてのアクセサーについてよく考えてください。

于 2013-07-24T09:54:13.897 に答える