类的同名覆盖和函数重载

有下列代码:

#include 
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函数,这不算函数重载,这里发生的是“同名覆盖”。

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


你可能感兴趣的:(C++学习)