C ++在继承时重命名函数参数?

时间:2017-01-04 18:42:13

标签: c++ inheritance override

如果我覆盖虚拟方法,我可以更改子项中参数的名称吗?相同类型的参数,只需将(int num)更改为(int n)

这个例子有效吗?

class Animal
{
    public:
    virtual int foo(int num) {
        return num + 1;
    }
};

class Cat : public Animal
{
    public:
    int foo(int n) override {
        return n - 1;
    }
};

如果是,为什么论点名称无关紧要?

5 个答案:

答案 0 :(得分:4)

参数的名称无关紧要。

唯一必须匹配的是参数的类型。

以及类方法本身是否为const。并且方法的返回值必须匹配。

答案 1 :(得分:3)

为了给出正确的答案,参数的名称无关紧要,因为它们不是函数签名的一部分。有关(非常全面)的解释,请参阅http://en.cppreference.com/w/cpp/language/function

顺便说一句,const - 论证本身也不是签名的一部分。这样,void foo(const int x);foo (int x)就相同了。

答案 2 :(得分:1)

我用附加的代码编译了代码:

int main() {
    // your code goes here
    Animal a;
    Cat c;
    cout << a.foo(4) << endl;
    cout << c.foo(4) <<endl;
    return 0;
}

这运行并给出了预期的输出5,3。

所以似乎改变参数名称是完全有效的。

答案 3 :(得分:1)

只要参数的范围限定为要声明的函数,就可以。重要的是参数和类型的数量,因此请确保overriden函数与基数<{p>}具有相同的signature

class Animal
{
    public:
    virtual int foo(int) { // even no parameter identifier and it is ok
        return 0;
    }
};

class Cat : public Animal
{
    public:
        int foo(int n) {
        return n - 1;
    }
};

答案 4 :(得分:0)

使用虚方法时,您需要做的就是保持方法的声明相同。也就是说,如果我谈论您的代码,您可以更改变量编号,但不能更改数据类型,参数列表,返回类型和函数名称