派生类 (C++) 中的重载函数
Overloaded function in derived class (C++)
这是一个非常基本的问题,但我的C++技能有点生疏......
我有一个基类,它有一个接受 3 个参数的成员函数,例如:
class MyBaseClass
{
public:
int func(int a, char b, int c);
};
以及一个派生类,该类使用 1 参数版本重载该函数,例如:
class MyDerivedClass : public MyBaseClass
{
public:
int func(float a);
};
当我尝试从派生类的对象上的基类调用函数时,如下所示:
MyDerivedClass d;
d.func(1, 'a', 0);
编译器抱怨MyDerivedClass::func() does not take 3 arguments
.确实如此,但我不应该能够通过派生类的对象访问基类函数吗?
我做错了什么?
>MyDerivedClass::func
隐藏了名称MyBaseClass::func
。您可以使用using
声明来解决此问题:
class MyDerivedClass : public MyBaseClass
{
public:
using MyBaseClass::func;
int func(float a);
};
您可能打算将方法MyBaseClass::func()
声明为virtual
但是,如果你真的想实现
当我尝试从基类调用函数时 派生类,如下所示
然后,您可以尝试
MyDerivedClass d;
d.MyDerivedClass::func( 3.14f );
这可以编译和工作,但似乎不是好的设计。
编译器抱怨
MyDerivedClass::func()
不需要 3 参数
确实如此,根据你的类定义,MyDerivedClass::func() 只接受一个参数。
在 MyDerivedClass 中添加 "using Class::func;"。
class MyDerivedClass : public MyBaseClass
{
public:
using MyBaseClass::func;
int func(float a);
};
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 可以打印矢量和矢量中的矢量的非重载C++函数
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 使用模板重载函数
- C++线程中,没有重载函数接受 X 参数
- std::vector 没有重载函数的实例与参数列表匹配
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 错误:无法解析对重载函数的引用;你的意思是调用它吗?
- 对重载函数find_first_not_of的不明确调用
- 如何从重载解析中删除重载函数?
- CUDA:重载函数"isnan"的多个实例
- C++派生类重载函数(带有 std::function 参数)不可见
- 避免在人为的重载函数调用中拼写出类型
- C++:如何为多个重载函数保留通用代码路径?
- 什么时候可以使用常量装饰调用我的重载函数?
- 尝试使用谓词函数会导致错误:"std::sort"未找到匹配的重载函数
- std::调用,未找到匹配的重载函数
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 为什么使用不匹配的参数调用重载函数仍然有效
- 如何通过签名作为模板参数来解决重载函数?