1

BaseクラスとクラスがあるとしDerivedます。

Base *A = new Base;

ここで、A は Base クラスへのポインタ ポイントであり、A がnew指すものを構築します。

私も見ました

Base *B = new Derived;

これをどう説明する?BaseB はClassへのポインターであり、 DerivedB によって構築され、ポイントされたクラスですか? Baseたとえば、クラスから派生した関数があり、それがクラスでVirtual void f()オーバーライドされている場合、Derived

B->f()

関数のどのバージョンを呼び出すか? クラス内のバージョンBase、またはクラス内でオーバーライドされたバージョンDerived

に新しい関数がある場合void g()DerivedB->g()この関数を適切に呼び出すでしょうか?

もう一つは、です

int *a = new double;

また

double *a = new int;

法的?

4

2 に答える 2

3

What if there is a new function void g()in Derived, is B->g() going to invoke this function properly?

次のように呼び出すことができます。

//! cast to derived if b really is base of derived
derived* d= dynamic_cast<derived*>(b);
//! d is 0 if b is not a base of derived
if(d)
  d-> g();
于 2013-10-26T06:28:07.100 に答える