[英]Resolving overloading ambiguity with multiple inheritance of base class templates in C++
[英]Member functions ambiguity with multiple inheritance templates
我公開將 class 模板“區域”的兩個實例,一個 int 和另一個 char 派生到一個單獨的 class“矩形”中。
template<class T>
class Area {
public:
T a;
T getArea() { return a; }
void setArea(T t) { a = t; }
};
class Rectangle : public Area<int>, public Area<char> {
};
int main() {
Rectangle a;
a.setArea(1);
std::cout << a.getArea() << std::endl;
Rectangle b;
b.setArea('c');
std::cout << b.getArea() << std::endl;
}
我看到 setArea 和 getArea 有歧義。 為什么呢? 我想在 public Area 之后, public Area 會有兩個 setArea 的定義。 首先,void setArea(int) 和另一個 void setArea(char)。 如果我錯了,請糾正我。 如果我是正確的,為什么會模棱兩可?
如果using
語句將兩個基類中的名稱setArea
帶入派生的 class:
class Rectangle : public Area<int>, public Area<char> {
using Area<int>::setArea;
using Area<char>::setArea;
};
編譯器將能夠調用正確的setArea
。
這對getArea
不起作用,因為這兩個函數僅在返回類型上有所不同。 您必須在呼叫站點區分它們:
std::cout << a.Area<int>::getArea() << std::endl;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.