在派生类中使用基类的私有成员变量的最佳方法

问题描述 投票:0回答:2

我有以下代码,其中基类定义了纯虚函数,派生类定义了此纯虚函数,以使用基类的私有成员变量var执行某些计算(但是var不会更改)。 var通常是一些大结构。

[从设计的角度来看,我读到,在这种情况下,通常var不能成为保护成员。实现我想要的最佳方法是将var作为参数传递给virtual_func()吗?

这激发了第二个问题。如果我想在var中修改virtual_func怎么办?这会改变您的答案吗?

class base
{
public:
  void search()
  {
    //virtual func in derived class must use var in base class, but not change var

    virtual_func();
  }

private:
  T var;
  virtual void virtual_func() = 0;
};

class derived : public base
{
  void virtual_func()
  {
    //does something with base class's var, but not alter it
  }
};
c++ inheritance polymorphism virtual
2个回答
1
投票

如果不想在基类中创建var protected,则可以在基类中添加publicprotected getter函数,然后可以在派生类中调用该函数。有点像

T getVar() const { return var; }

0
投票

“从设计的角度来看,在这种情况下,我通常不赞成使var成为受保护的成员。”

无论您在哪里阅读,似乎都是错误的观念。如果必须访问base::var中的class derived,则最佳设计决策是将var设置为protected。其他所有内容都会干扰封装。除了您的问题中提到的要求之外,protected的用例还有什么用。 :-)

© www.soinside.com 2019 - 2024. All rights reserved.