派生类需要重新定义的变量是否存在纯抽象基类?

时间:2012-07-17 10:02:42

标签: c++ oop

我对纯抽象基类有疑问。假设我有一个带有一些函数和变量的抽象纯基类。如果我从基础创建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个变量“input”和“output”?或者只有一套?

4 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:2)

虽然你可以轻松测试这个,但这里有一个提示:考虑你定义成员的方式:

int base::input;

现在认为只有一个base类,而static与该类绑定。

答案 2 :(得分:0)

有两组变量;一个用于obj 1,一个用于obj 2

答案 3 :(得分:0)

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