子类2个func都删除也能编译?
【 在 KingPillar (KingPillar) 的大作中提到: 】
: 标 题: [求助]当子类中只重写一个重载函数时,为什么会报错?
: 发信站: 水木社区 (Tue Jun 16 17:13:51 2020), 站内
:
: [upload=1][/upload]
: 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 171.83.6.*