返回信息流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并没有重载此函数,按理说应该可以正常调用,求解。
这是一条镜像帖。来源:北邮人论坛 / cpp / #47880同步于 2010/12/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求大牛来解答
XZC
2010/12/17镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
只有同名同参同返回类型才是覆盖撒,所以我觉得只是覆盖了基类的第一个函数,而与第二个函数其形参本身就不同,为什么也覆盖了呢?
【 在 a206206 的大作中提到: 】
: 函数覆盖了。在这种情况下并不是重载。
: 你在B1中加上:using A::func; 就是重载了。
: 注意函数的调用查询规则
: ...................
在派生类中,只要定义了和基类中同名的函数,就发生了遮蔽或者说覆盖。而不是说要定义相同的函数签名的才会覆盖基类中的函数。当然,virtual函数需要有相同的函数签名和返回值。
【 在 XZC 的大作中提到: 】
: 只有同名同参同返回类型才是覆盖撒,所以我觉得只是覆盖了基类的第一个函数,而与第二个函数其形参本身就不同,为什么也覆盖了呢?
: 【 在 a206206 的大作中提到: 】
: : 函数覆盖了。在这种情况下并不是重载。
: ...................