小编use*_*062的帖子

C++为什么我可以从一个被驱动的类调用基类的私有虚函数?

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)

感谢您的回复

c++ virtual inheritance private function

1
推荐指数
1
解决办法
1724
查看次数

标签 统计

c++ ×1

function ×1

inheritance ×1

private ×1

virtual ×1