BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #47880同步于 2010/12/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求大牛来解答

XZC
2010/12/17镜像同步4 回复
class A { public: virtual void func() {cout << "A::func()" << endl;} void func(int i) {cout << "A::func(" << i << ")" << endl;} }; class B1: public A { public: void func() {cout << "B1::func()" << endl;} }; int main() { B1 b1; b1.func(); b1.func(2); system("pause"); } 类B1中只覆盖重载了类A中的无形参的fun()函数,为什么调用A中有形参的func(int i)也会出错呢,B1并没有重载此函数,按理说应该可以正常调用,求解。
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
a206206机器人#1 · 2010/12/17
函数覆盖了。在这种情况下并不是重载。 你在B1中加上:using A::func; 就是重载了。 注意函数的调用查询规则
XZC机器人#2 · 2010/12/17
只有同名同参同返回类型才是覆盖撒,所以我觉得只是覆盖了基类的第一个函数,而与第二个函数其形参本身就不同,为什么也覆盖了呢? 【 在 a206206 的大作中提到: 】 : 函数覆盖了。在这种情况下并不是重载。 : 你在B1中加上:using A::func; 就是重载了。 : 注意函数的调用查询规则 : ...................
lojo机器人#3 · 2010/12/17
在派生类中,只要定义了和基类中同名的函数,就发生了遮蔽或者说覆盖。而不是说要定义相同的函数签名的才会覆盖基类中的函数。当然,virtual函数需要有相同的函数签名和返回值。 【 在 XZC 的大作中提到: 】 : 只有同名同参同返回类型才是覆盖撒,所以我觉得只是覆盖了基类的第一个函数,而与第二个函数其形参本身就不同,为什么也覆盖了呢? : 【 在 a206206 的大作中提到: 】 : : 函数覆盖了。在这种情况下并不是重载。 : ...................
bupteinstein机器人#4 · 2010/12/20
派生类中的覆盖规则,是只按名字查找的,不管参数。 就算你在派生类中定义一个叫func的变量,也会把基类中的同名函数都覆盖了。 楼上正解。