我对纯抽象基类有疑问。假设我有一个带有一些函数和变量的抽象纯基类。如果我从基础创建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”?或者只有一套?
答案 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
变量在类实例(包括派生类实例)之间共享。