类的同名覆盖和函数重载

来源:互联网 发布:广元历史湿度数据查询 编辑:程序博客网 时间:2024/05/16 18:39

有下列代码:

#include <iostream>using namespace std;struct Base{void foo (int){};};struct Derived: public Base{void foo(string){};};void main(){Derived d; d.foo(1024);}

这是《C++ primer》题15.23的一个减缩验证程序。

虽然,类继承中会发生覆盖,这个规则我知道,但是却没有注意,这个覆盖指的的是

“同名覆盖”,即只要函数名(也包括数据成员名)相同,就发生覆盖行为。这也就是说基类和子类的函数不存在重载现象。

上述代码中,虽然子类Drived继承了基类的int参数型foo函数,自己又有string参数型foo函数,这不算函数重载,这里发生的是“同名覆盖”。

记得应该有这么个结论:“函数重载只发生在一个类内部,同名覆盖只发生在基类子类之间”。这个结论足以解释这个现象。