virtual function overriding in C++
我有一个带有虚函数-
1 | int Start(bool, MyType *) |
但不是虚拟的
在派生的
1 2 3 4 5 | int Derived::Start(bool b, MyType *mType) { m_mType = mType; return Start(b); } |
号
但它给出了编译错误。
1 | "Start' : function does not take 1 arguments" |
但是,
在C中,上述代码有效,即解析调用不需要引用base。
外部,如果调用如下
1 2 3 |
。
失败的消息是:
1 | Start : function does not take 1 arguments |
但在C中,同样的场景也起作用。
据我所知,虚拟机制不能用于解析调用,因为这两个函数具有不同的签名。
但电话并没有按预期得到解决。
请帮忙
您的两个选项要么是添加
1 2 3 4 5 6 | int Derived::Start(bool b, MyType *mType) { using Base::Start; m_mType = mType; return Start(b); } |
或者如您所指出的,添加
1 2 3 4 5 | int Derived::Start(bool b, MyType *mType) { m_mType = mType; return Base::Start(b); } |
号
这是因为名字隐藏。
当您在派生类中声明一个与基类中的函数同名的函数时,基类版本将被隐藏,并且无法通过非限定调用访问。
您有两种选择:要么像
1 | using Base::Start; |