1

定義は次のとおりです。

クラスを使用したオブジェクト指向プログラミングでは、インスタンス変数はクラスで定義された変数(つまりメンバー変数)です//この部分を取得します

、クラスの各オブジェクトに個別のコピーがあります。//この部分は取得できません。

オブジェクトに個別のコピーを作成するにはどうすればよいですか?何の別のコピー?

基本的な質問をしてすみません、私はまだ初心者です。

ありがとうございました

4

3 に答える 3

1

[コメント回答] インスタンス変数は、宣言された各オブジェクトのインスタンスを持つ変数です。クラス変数は、そのタイプで宣言されたすべてのオブジェクトに対して1つしかない単一のメンバー変数です。クラス変数はキーワードstaticを使用しますが、インスタンス変数は使用しません!

[ORIGINAL] クラスを定義すると、メンバー宣言があります。

そのクラスタイプの変数が定義されるまで、オブジェクトは実際にはインスタンス化されません(またはメモリスペースが与えられません)。

次に、そのクラスタイプを2つ定義すると、それらのオブジェクトには独自のメモリスペースが与えられ、実際、各オブジェクトの各メンバーには独自のメモリがあります(したがって、そのオブジェクトの2つの個別のインスタンス化)。

これで、(オブジェクト内の)データの各グループを個別に操作できます。

クラス変数:

http://en.wikipedia.org/wiki/Class_variable

インスタンス変数:

http://en.wikipedia.org/wiki/Instance_variable

于 2012-07-12T00:09:38.200 に答える
0

2つのオブジェクトがある場合、各オブジェクトにはインスタンス変数の独自のコピーがあります。つまり、同じ値を付けても、a.xとは異なります。b.x

于 2012-07-12T00:05:52.883 に答える
0

私は別のひどいエッチ・ア・スケッチを作りました、そしてそれであなたの目を燃やさなければなりませんでした。それが理解の問題を解決するなら、素晴らしいです!

クラスメンバーの関係

だから、私たちはクラスを持っています、それを呼びますFoo。示されているように、Fooいくつかの静的メンバーがあります:
x、、yz

上部に、オブジェクト以外のアクセスが表示されます。これは、オブジェクトなしでこれらの静的メンバーにアクセスできることを意味します。実際、オブジェクトは開始前に存在するため、アクセスする前にオブジェクトを作成する必要はありませんmain

struct Foo {
    static int x, y, z;
};

int Foo::x = 3;
int Foo::y = 1;
int Foo::z = 8;

int main() {
    std::cout << Foo::y;
    Foo::x = 6;
}

次に、2つのオブジェクトのインスタンスメンバーを含む他のサークルがあります。

struct Foo {
    int a;
    int b;
    int c;

    Foo (int a2, int b2, int c2) 
        : a (a2), b (b2), c (c2){}
};

int main() {
    Foo obj1 (6, 9, 10);
    Foo obj2 (3, 2, 4);

    std::cout << obj1.a; //outputs 6
    std::cout << obj2.a; //outputs 3 - different

    obj1.z = 100;
    std::cout << obj2.z; //outputs 100 - same
    std::cout << Foo::z; //outputs 100
}

変数にアクセスするために、メンバー関数と静的関数を挿入することもできます。

struct Foo {
    int getA() const {return a;}
    void setA (int newA) {a = newA;}

    static int getX() const {return x;}
    static void setY (int newY) {return y;}
    static void setB (int newB) {
        b = newB; //error: static functions can't access instance members
    }
}

int main() {
    Foo obj1 (6, 9, 10);

    std::cout << obj1.getX(); //outputs 3
    Foo::setY (5);

    obj1.setA (98);
    std::cout << obj1.getA(); //outputs 98
}

要点をまとめると:

  • 各オブジェクトは、独自のインスタンスメンバーにアクセスできます。1つのオブジェクトのインスタンスメンバーが他のオブジェクトに影響を与えることはありません(参照などの意図がない限り)。

  • 両方のオブジェクトは同じ静的メンバープールを共有します。このプールは作成され、オブジェクトが作成される前に、Foo::構文を使用して、または後に、obj1.またはobj2.構文を使用して操作できます。静的メンバーをどこかで変更すると、すべての場合に影響します。

  • これらのメンバーの使用を制御するには、メンバーをプライベートにし、アクセス機能を提供します。静的関数はインスタンスメンバーにアクセスできないことに注意してください。この関数はオブジェクトを作成せずに使用できるので、インスタンスメンバーで何をするのでしょうか。変更する特定のオブジェクトのインスタンスオブジェクトのプールはありません。

  • 最後の点を詳しく説明すると、メンバー関数は暗黙のthis引数を渡されます。これにより、変更するときに変更する変数が示されます。a = newA;実際には。と同等this->a = newA;です。ただし、静的メンバー関数は引数を取得しないため、this変更するオブジェクトを知る方法はありません。

于 2012-07-12T01:29:30.390 に答える