2008-10-27 102 views
3

当你有一个派生类,是有指从比其他的方法给一个变量的简单的方法:有没有简单的方法来使用基类的变量?

BaseClass::variable 

编辑
由于恰巧,我发现,解释了这个问题一个页面使用功能代替: Template-Derived-Classes Errors。显然,使用模板类时会有所不同。

+0

你可以把你的问题更具体,这样你说明,它涉及到模板派生类的事实呢?谢谢。 – 2008-10-27 20:25:45

回答

10

如果基类成员变量是受保护的或公共的,则只能在派生类的任何成员函数中通过名称引用它。如果它对于基类是私有的,编译器将不会让派生类访问它。例如:


class Base 
{ 
protected: 
    int a; 

private: 
    int b; 
}; 

class Derived : public Base 
{ 
    void foo() 
    { 
    a = 5; // works 
    b = 10; // error! 
    } 
}; 

还有一点可以说是保持所有成员变量都是私有的,并根据需要提供getter和setter。

此外,提防“隐藏”数据成员:


class Base 
{ 
public: 
    int a; 
}; 

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

这将创建一个名为a两个变量:一个在Base,在Derived之一,它可能会导致混乱和错误。

+0

只是为了澄清,访问基类的私有成员将导致编译器错误。编译器不会忽略它并寻找另一个匹配。 – KeithB 2008-10-27 19:18:20

相关问题