const 虚函数与非 const 虚函数

2024-02-27

class Base
{
   public:
   virtual void func() const
   {
     cout<<"This is constant base "<<endl;
   }
};

class Derived : public Base
{
   public:
   virtual void func()
   {
     cout<<"This is non constant derived "<<endl;
   }
};


int main()
{
  Base *d = new Derived();
  d->func();
  delete d;

  return 0;
}

为什么输出打印“这是常量基数”。但是,如果我删除 func() 的基本版本中的 const,它会打印“This is non const returned”

d->func() 应该正确调用派生版本,即使 Base func() 是 const ,对吗?


 virtual void func() const  //in Base
 virtual void func()        //in Derived

const部分是实际上是一部分函数签名,这意味着派生类定义了一个new函数而不是压倒性的基类函数。这是因为他们的签名不匹配。

当您删除const部分,然后它们的签名匹配,然后编译器看到派生类定义func as 覆盖版本基类函数的func,因此如果对象的运行时类型是,则调用派生类函数Derived类型。这种行为称为运行时多态性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

const 虚函数与非 const 虚函数 的相关文章