当基类 A 是抽象的时,除了一些在整个类层次结构中通用的函数之外......并声明了类 B:
template <class widgetType> class B : public A { ... };
并且声明了 C 类:
class C : public B<myWidget> { ... };
A 中声明的某些函数不会继承到类 C 是否有任何原因?
我在 A 中实现了两个具有相同名称但参数不同的(虚拟)函数,其中一个在 C 中被覆盖。当我尝试使用我的 C 类实例访问未被覆盖的函数时,编译器无法找到它。我看不出有什么不对...所以我很想知道是否有我不理解的有关模板和继承的特殊规则。
最佳答案
with the same name but different parameters
您遇到了函数隐藏问题。如果一个类定义了一个与基类中的方法同名的方法,无论它是否被覆盖,该方法都会对基类隐藏其他方法。模板与它无关。
当编译器试图解析一个函数名时,它首先在最派生类的上下文中查找。如果它找到在那里定义的名称,它就会停止更深入地查找,而只会考虑在同一级别定义的那些名称。
关于c++ - 使用模板的函数继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12738967/