class Base
{
public :
void func(int i) {}
void func(){}
};
class Derived : public Base
{
public:
void func(int i){}
void func() {} //line: 12
};
int main()
{
Derived* pDerived = new Derived(); //Line: 17
pDerived->func(); //Line:18
}
代码如上图所示:
如果删除第12行, 则第18行会报“function does not take 0 arguments” 错误 -- VC2019 + Windows, g++(4.8.5) & Linux 行为类似
注:
1. 于两个func函数是否virtual无关。
2. 子类中两个func函数都删除时也可以编译,运行
3. 第17行pDerived的类型是子类类型, 不是基类。
不理解, 子类只覆盖一个func函数时发生了什么。
※ 修改:·KingPillar 于 Jun 16 17:25:06 2020 修改本文·[FROM: 222.126.214.*]
※ 来源:·水木社区
http://www.newsmth.net·[FROM: 222.126.214.*]
修改:KingPillar FROM 222.126.214.*
FROM 222.126.214.*