8

私は C++ で OOP の基本概念を学んでいますが、論理的な問題に遭遇しました。

#include <iostream>
#include <conio.h>

using namespace std;

class A {
    int i;
public:
    void set(int x) {
        i=x;
    }
    int get() {
        return i;
    }
    void cpy(A x) {
        i=x.i; 
    }
};

int main()
{
    A x, y;
    x.set(10);
    y.set(20);

    cout << x.get() << "\t" << y.get() << endl;
    x.cpy(y);
    cout << x.get() << "\t" << y.get() << endl;
    getch();
}

上記のコードで、なぜ [19 行目] にアクセスできるのかを知りたかったのですがx.i、それは別のオブジェクトのプライベート メンバーです。オブジェクトがパラメーターとして渡されても、プライベート スコープは同じクラスに制限されていませんか?

4

6 に答える 6

13

privateC++ では、オブジェクトに対してプライベートではなく、クラスに対してプライベートを意味します。両方の解釈が可能です。実際、一部の言語は他方を選択しました。しかし、ほとんどの言語はこの点で C++ に似ており、同じクラスのオブジェクトが別のインスタンスのプライベート メンバーにアクセスできるようになっています。

于 2012-06-03T17:00:50.160 に答える
5

変数xyは、同じクラスの 2 つのインスタンスです。これらは異なるオブジェクトですが、同じクラスに属しています。そのため、メンバー関数からプライベート メンバーにアクセスすることが可能です。

于 2012-06-03T16:55:49.523 に答える
2

クラスのプライベート プロパティまたはメソッドは、クラス スコープの外部から直接アクセスできないことを意味します。そのため、パブリック メソッドは、プライベート メンバーの値にアクセスして操作できるクラス内で定義されます。

上記の例では、オブジェクトから直接アクセスする'i'のではなく、パブリック メソッドを介してオブジェクトを操作しています。

次のように考えてみてください。あなたは銀行口座を持っていて、銀行にあるあなたのお金は個人会員です。直接銀行に行って自分でお金を受け取ることはできません。銀行のキャッシャーは、私有財産、つまりあなたのお金にアクセスできるパブリック メソッドのようなものであり、キャッシャーを介してお金を操作できます。

于 2017-05-20T10:09:57.413 に答える
0

cpy(A x)クラスのメンバーであり、privateフィールドとメソッドにアクセスできます。

privateキーワードは、フィールドにアクセスする他のクラス (オブジェクト) からのインスタンスを制限します。クラスに属するすべてのコードは、独自のプライベート メンバー (フィールドまたはメソッド) にアクセスできます。

于 2012-06-03T16:53:50.977 に答える
0

オブジェクトをパラメータとして渡してもプライベートスコープは同じクラスに限定されていませんか?

はい、これは同じクラス、つまりクラスAxのプライベートメンバーにアクセスすることです。i

于 2016-10-14T11:04:26.993 に答える
0

A class can access it's own private data members.

This also means if you have any functions that deal with two or more instances (this and something passed as a parameter) you can access both object's private (and public) variables/methods

于 2012-06-03T16:53:57.723 に答える