我有以下代码,其中基类定义了纯虚函数,派生类定义了此纯虚函数,以使用基类的私有成员变量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
}
};
如果不想在基类中创建var
protected
,则可以在基类中添加public
或protected
getter函数,然后可以在派生类中调用该函数。有点像
T getVar() const { return var; }
“从设计的角度来看,在这种情况下,我通常不赞成使var成为受保护的成员。”
无论您在哪里阅读,似乎都是错误的观念。如果必须访问base::var
中的class derived
,则最佳设计决策是将var
设置为protected
。其他所有内容都会干扰封装。除了您的问题中提到的要求之外,protected
的用例还有什么用。 :-)