覆盖包含常量的虚拟成员函数

时间:2014-06-03 14:43:57

标签: c++ override constants virtual member-functions

如何覆盖以下类型的虚拟成员函数:

virtual AnimalId func(int index) const

其中AnimalIdtypedef unsigned int

我尝试了几种方法,但要么是因为我没有提供输出的错误,要么我根本没有覆盖。我在一些网站上看到,为了做到这一点,我可能需要使用静态const,但我不知道如何。

2 个答案:

答案 0 :(得分:0)

你的意思是:(注意,如果编译C ++ 03,你必须删除override

typedef unsigned int AnimalId;

class Base
{
public:
    virtual ~Base() {}
    virtual AnimalId func(int index) const { return 0; }
};

class Derived : public Base
{
public:
    AnimalId func(int index) const override { return 42; }
};

答案 1 :(得分:0)

为了覆盖签名方法

virtual AnimalId func(int index) const

在基类Base中声明,您必须在派生类中定义具有相同签名的函数:

class Derived : public Base {
public:
   virtual AnimalId func(int index) const
     {
         return 43;  // I am using 43 because I think this is
                     // so much underestimated in favor of 42
     }
    //...
};

或者您可以输入override kryword更明确:

class Derived : public Base {
public:
   virtual AnimalId func(int index) const override
     {
         return 43 & 45;
     }
    //...
};