パブリックに継承されたインターフェイスにも存在するクラスオーバーロードメソッドはありますか?これは明白で便利なようですが、コンパイラ(VC、Intel、GCC)はすべて、少なくとも私の構造では不平を言っています。以下はおもちゃの例です。継承されたrebound()関数には2つの明確なオーバーロードがありますが、これはコンパイルされません。どちらかのクラスでrebound()メソッドの名前を変更すると、正常に機能しますが、同じメンバー関数名を共有している場合(異なる引数タイプでオーバーロードされている場合でも!)、「関数に引数が少なすぎる」という致命的なエラーが発生します。電話。"
回避策は簡単です(メソッドの名前を変更するだけです)が、これがC ++の制限であるかどうか(およびその理由)を理解しようとしています。
#include
class Bound {
public:
Bound() : x0(0.0), x1(0.0) {};
Bound(double x) : x0(x), x1(x) {};
double width() const {return x1-x0;}
void rebound(const Bound *a, const Bound *b);
private:
double x0, x1;
};
void Bound::rebound(const Bound *a, const Bound *b)
{
if (a && b) {
x0=std::min(a->x0, b->x0);
x1=std::max(a->x1, b->x1);
}
}
class Node : public Bound {
public:
Node(double x) : Bound(x), left(0), right(0) {};
Node(Node *a, Node *b) : left(a), right(b) {rebound();}
void rebound() { rebound(left, right); }
private:
Node *left;
Node *right;
};
int main() {
Node A(1.0);
Node B(2.0);
Node C(&A, &B);
}