Herb Sutter的着名文章Virtuality声明如下:
准则#2:更喜欢将虚拟功能设为私有.
这很简单.这允许派生类重写函数以根据需要自定义行为,而无需通过派生类调用它们来直接暴露虚函数(如果函数只是受保护,则可能)
在下面的代码中,private_base_func()是在基类中声明的私有虚函数,并在驱动的类构造函数中调用,奇怪的是,这个代码编译得很好,它从被驱动的类调用基类的私有虚函数,与上述说法相矛盾.这让我很困惑.
class base
{
public:
base() {}
virtual ~base(){}
private:
virtual void private_base_func()
{
std::cout << "Base Class invoke" << std::endl;
}
};
class drived : public base
{
public:
drived()
{
private_base_func(); // this line should not compile
}
private:
// Overriding base class virtual function
void private_base_func()
{
std::cout << "Drived class invoke" << std::endl;
}
};
int main()
{
base* ptr = new drived();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
感谢您的回复