0

当基类 A 是抽象类时,除了整个类层次结构中通用的几个函数......并且声明了类 B:

template <class widgetType> class B : public A { ... };

并声明 C 类:

class C : public B<myWidget> { ... };

是否有任何理由在 A 中声明的某些函数不会继承到 C 类?

我在 A 中实现了两个同名但参数不同的(虚拟)函数,其中一个在 C 中被覆盖。当我尝试使用类 C 的实例访问非覆盖函数时,编译器找不到它。我看不出有什么问题......所以我很想知道是否有关于模板和继承的特殊规则我不明白。

4

1 回答 1

1

同名但参数不同

你遇到了函数隐藏。如果一个类定义了一个与基类中的方法同名的方法,无论它是否是覆盖,该方法都会对基类隐藏其他方法。模板与它无关。

当编译器尝试解析函数名时,它首先在派生最多的类的上下文中查找。如果它找到那里定义的名称,它将停止深入查找,并且只考虑在同一级别定义的那些名称。

于 2012-10-05T03:50:25.770 回答