gpt4 book ai didi

c++ - 如何在没有 friend 或 C++ 中的 'getter' 函数的情况下从派生类访问抽象私有(private)数据?

转载 作者:行者123 更新时间:2023-11-28 03:52:29 25 4
gpt4 key购买 nike

所以,我现在陷入了两难境地。我应该如何从派生类访问纯抽象基类私有(private)成员变量?听 friend 说可以通过base constructor来访问,但是他没有说明。这怎么可能?有一些继承自基类的类。有什么方法可以访问私有(private)变量吗?

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

最佳答案

这是不可能的。私有(private)成员只能在定义它们的类中访问(加上它的 friend),设计

每个类都单独负责其私有(private)成员变量。如果子类需要访问它们,则必须将它们声明为 protected,或者最好通过一些 publicprotected 提供的方法间接访问基类。

大多数时候,如果你真的认为你必须访问基类的私有(private),这表明基类或你的子类的设计很糟糕!


更新

感谢您的代码!为什么要访问rRectis_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
{
// ...
}

关于c++ - 如何在没有 friend 或 C++ 中的 'getter' 函数的情况下从派生类访问抽象私有(private)数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4966364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com