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;
}
提前感谢您的回复