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 分别得到 2 组变量“输入”和“输出”?还是只有1套?

4

4 回答 4

4

它们将只有一组用于所有派生类的静态变量。很容易测试:

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

原因是所有静态内容仅适用于基类(请注意,它们绑定到class,而不是object,因此它也与创建的每个类的对象数量无关)。由于您只有一个基类,因此无论您将拥有多少个派生类,变量集仍将绑定到该单个基类。

于 2012-07-17T10:05:37.983 回答
2

尽管您可以轻松地对此进行测试,但这里有一个提示:考虑您如何定义成员:

int base::input;

现在认为只有一个base类,并且static绑定到该类。

于 2012-07-17T10:05:28.937 回答
0

static变量在类实例(包括派生类实例)之间共享。

于 2012-07-17T10:21:30.017 回答
0

There are two sets of variables; one for obj 1 and one for obj 2.

于 2012-07-17T10:07:15.547 回答