如果我覆盖虚拟方法,我可以更改子项中参数的名称吗?相同类型的参数,只需将(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;
}
};
如果是,为什么论点名称无关紧要?
答案 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)
使用虚方法时,您需要做的就是保持方法的声明相同。也就是说,如果我谈论您的代码,您可以更改变量编号,但不能更改数据类型,参数列表,返回类型和函数名称。