2014-01-16 722 views
0

C++派生类是否可以继承基类中的静态数据成员和静态成员函数?C++派生类是否可以继承基类的静态数据成员和静态成员函数?

class Base 
{ 
public: 
    static int base1; 
    static void function1() {}; 
protected: 
    static int base2; 
    static void function2() {}; 
} 

class Derived : public Base 
{ 
public: 
    int a; 
protected: 
    int b; 
} 

是否Derivedbase1base2function1function2

如果Derived类拥有它们,那么protected数据和public数据之间的关系是什么关系,这些数据是从基类继承的?他们是一样的吗?或者是继承数据和函数的基类的副本?

回答

2

static成员不是继承但他们仍然易于访问。也就是说,派生类型不会有版本,但您仍然可以访问它们,它将与您直接访问基本静态成员相同。由于静态数据成员对于所有对象都是公共的。

+0

为了清楚起见,非静态数据成员和成员函数是“继承的”,如果是的话,这与静态的“非继承”性质有什么不同? –

+0

@SteveJessop:这是一个更难回答的问题,它需要一个精确的定义*继承*的含义。派生类型*包含*基类的一个实例作为子对象,所以非静态数据成员是* there *,虽然它们可能或不可用于直接使用(取决于访问说明符)。所不同的是,当你修改非静态成员时,你修改了这个对象的一部分,但是当你修改静态成员时,你正在修改这个Base的静态成员。其他人修改了Base的静态成员,你看到的值将会改变。 –