C++ 中的多态性:我是否必须为子类函数提供与父类函数相同的参数 - 如何重载
如果我有一个像这样的父类:
class Parent {
protected:
virtual void foo(type1 var1, type2 var2);
}
和一个子类:
class Child : public Parent {
foo(type1 var1, type2 var2);
}
但是如果 Child
中的 foo
函数不需要 var1
和 <代码>var2?有没有办法告诉编译器不要为这些变量提供内存,因为它们没有被使用?或者,你如何超载它?不过,结合重载和多态性......你如何做到这一点(如果你可以/愿意!)。
谢谢。
If I have a parent class like this:
class Parent {
protected:
virtual void foo(type1 var1, type2 var2);
}
and a child class:
class Child : public Parent {
foo(type1 var1, type2 var2);
}
but what if the foo
function in Child
doesn't need var1
and var2
? Is there a way to tell the compiler not either not give memory to these variables because they're not being used? Or, how do you overload it? Combining overloading and polymorphism though.. how do you do that (if you can/would!).
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果子级的函数签名与父级的不同,则子级有两个函数,并且重载。
编译器将根据您提供的参数类型选择正确的参数。如果愿意,可以修改其参数并将工作转发给另一个函数。
例如,
或者,如果您想消除歧义。
覆盖是另一回事。
If the child's function signature is different to the partent's, then the child has two functions which are overloaded.
The compiler will pick the right one according to which kind of arguments you give it. One can modify its arguments and forward the work to another function if it likes.
For example,
Or, if you want to disambiguate.
Overriding is something else.
您只需在 Child 类中定义另一个具有不同签名(即不同参数)的 foo 函数即可。这是函数 foo 的重载。编译器会根据你输入的参数执行正确的函数。
You simply have to define another foo function in Child class with different signature (i.e. different argument). This is overloading function foo. The compiler will execute the correct function according to the parameters you put.