0

純粋な抽象基底クラスについて質問があります。いくつかの関数と変数を持つ抽象純粋基本クラスがあるとします。ベースから 2 つの派生クラスを作成すると、両方の派生クラスが独自の変数セットを取得しますか?

例えば:

#include <iostream>
using namespace std;

class base
{
public: 
virtual void display() = 0;
protected: 
static input;
static output;
}

class Derived1:public base
{
public:
virtual void display();
void readInput();
}

class Derived2:public base
{
public:
virtual void display();
void readInput();
}
class Derived1:public base
{
virtual void display();
}
int main()
{
 Derived1 obj1;
 Derived2 obj2;

return 0;
}

ここで obj1 と obj2 get 2 は、変数「入力」と「出力」を個別に設定しますか? それとも1セットだけですか?

4

4 に答える 4

4

すべての派生クラスに対して静的変数のセットが 1 つだけになります。テストはとても簡単です:

class Base
{
public:
    static int k;
};
int Base::k;

class Derived1: public Base
{

};
class Derived2: public Base
{

};

int main(){
    Derived1::k = 5;
    Derived2::k = 10;

    std::cout << Derived1::k << "   " << Derived2::k;
}

出力:10 10

その理由は、すべての static 要素が基底クラスだけに適用されるためです (それらはobjectではなくclassにバインドされるため、作成される各クラスのオブジェクトの数にも関係がないことに注意してください)。基本クラスは 1 つしかないため、派生クラスがいくつあっても問題ありません。変数のセットは、その単一の基本クラスにバインドされます。

于 2012-07-17T10:05:37.983 に答える
2

これは簡単にテストできますが、ここにヒントがあります。メンバーの定義方法を検討してください。

int base::input;

baseクラスは1 つしかないと考えstaticて、そのクラスにバインドします。

于 2012-07-17T10:05:28.937 に答える
0

変数には 2 つのセットがあります。1 つと 1obj 1obj 2

于 2012-07-17T10:07:15.547 に答える
0

static変数はクラス インスタンス (派生クラス インスタンスを含む) 間で共有されます。

于 2012-07-17T10:21:30.017 に答える