所以,我现在陷入了两难境地。我怎么想从派生类访问纯抽象基类私有成员变量? 我从朋友那里听说可以通过基础构造函数访问它,但他没有解释。这怎么可能? 基类中有一些继承的类。有没有办法获得对私有变量的访问权?
class Base_button
{
private:
bool is_vis;
Rect rButton;
public:
// Constructors
Base_button();
Base_button( const Point &corner, double height, double width );
// Destructor
virtual ~ Base_button();
// Accessors
virtual void draw() const = 0;
bool clicked( const Point &click ) const;
bool is_visible() const;
// Mutators
virtual void show();
virtual void hide();
void move( const Point &loc );
};
class Button : public Base_button
{
private:
Message mButton;
public:
// Constructors
Button();
Button( const Point &corner, const string &label );
// Acessors
virtual void draw() const;
// Mutators
virtual void show();
virtual void hide();
};
我希望能够从子类
访问基类中的Rect和bool答案 0 :(得分:1)
是否可以将基类成员更改为protected
?这是使子类可访问的直接方式。我不知道你的朋友指的是什么,除了派生类的构造函数调用基类的构造函数,基类的构造函数可以看到基类的private
成员。
答案 1 :(得分:1)
这是不可能的。私有成员只能在定义它们的类中访问(加上其friend
s),按设计。
每个类都对其私有成员变量负责。如果子类需要访问它们,则必须将它们声明为protected
,或者最好通过基类提供的某些public
或protected
方法间接访问它们。
大多数情况下,如果你真的认为你必须能够访问基类'privates,那么这表明基类或你的子类设计不好!
<强>更新强>
感谢您的代码!您为什么要访问rRect
和is_vis
?我想您可以通过Base_button::is_visible()
和Base_button::show()
,Base_button::hide()
访问后者。
如果您只想将几何信息从子类构造函数传递给基类,那么您确实可以调用基础构造函数:
Button::Button(const Point &corner, const string &label)
: Base_button(corner, 100, 100) // Presumably, this initializes rRect
{
// ...
}