をマッチング:C++多型の機能私は仮想関数とチェーンの継承とコード怒鳴るを持っており、それが印刷さ
D ptr
E
だから、機能マッチングのためのアルゴリズムは何である、私の推測では、それが最も近い父クラスを一致だのですか?しかし、& eは基本的にA *、B *、D *型です。なぜこれもコンパイルされ、このプロパティを使うのは良い習慣ですか?
#include <iostream>
using namespace std;
class A {
public:
virtual void f(){cout<<"A";};
};
class B :public A {
public:
virtual void f() {
cout<<"B";
}
};
class D : public B {
public:
virtual void f() {
cout<<"D";
}
};
class E : public D {
public:
virtual void f() {
cout<<"E";
}
};
void f(D *sth) {
cout<<"D ptr"<<endl;
sth->f();
}
void f(B *sth) {
cout<<"B ptr"<<endl;
sth->f();
}
void f(A *sth) {
cout<<"A ptr"<<endl;
sth->f();
}
int main() {
E e;
f(&e);
}
ここでは、2つの質問があります.1つはオーバーロードの解決と継承の連鎖です。 –
なぜ 'E'を印刷するのか理解していますか? –
グローバルf関数の複数のオーバーロードを持つことは、選択が実際の型ではなく宣言された型に依存するため、一般的には良い考えではありません。 – Phil1970