Pat*_*ick 3 c++ virtual interface access-specifier
在我的C++应用程序中,我有一个如下所示的界面:
class ICalculator
{
public:
virtual double calculateValue(double d) = 0;
};
Run Code Online (Sandbox Code Playgroud)
我有这个界面的实现,如下所示:
class MySpecificCalculator
{
public:
virtual double calculateValue(double d);
};
Run Code Online (Sandbox Code Playgroud)
现在我的同事抱怨这个并告诉我最好让calculateValue方法受到保护.这样,我们可以保证调用者总是通过接口传递,而不是通过直接实现.
这是正确的观察吗?是否真的更好地保护接口的实现?或者我们甚至不能把它私有化呢?
Chu*_*dad 10
你的同事是对的.
准则#1:更喜欢使用模板方法使接口非虚拟化.
准则#2:更喜欢将虚拟功能设为私有.
准则#3:只有派生类需要调用虚函数的基本实现时,才能使虚函数受到保护.
仅针对析构函数的特殊情况:
准则#4:基类析构函数应该是公共的和虚拟的,或者是受保护的和非虚拟的.