【发布时间】:2013-03-25 18:00:12
【问题描述】:
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;
}
提前感谢您的回复
【问题讨论】:
标签: c++ function inheritance virtual private