Tworząc obiekt D za pomocą konstruktora sparametryzowanego uruchamia się konstruktor domyślny kl. bazowej A, zamiast sparametryzowanego, dlaczego?
A że tak zapytam: czy Ty wywołujesz ów sparametryzowany konstruktor? Jeśli nie, to skąd kompilator ma się dowiedzieć, jakie argumenty chcesz przekazać konstruktorowi? Zawsze, jeśli tego nie sprecyzujesz, wywoła się c-tor domyślny. Zauważ, że jeśli zadeklarujesz parametryzowany konstruktor ze wszystkimi argumentami domyślnymi, to taki c-tor również jest traktowany jak domyślny.
jeśli dziedziczymy po jakiejś klasie to czy w każdym konstruktorze domyślny, kopiującym i sparametryzowanym należy wywołać również konstruktor klasy bazowej? Czy tylko w kopiujacym i sparametryzowanym? I jak z destruktorami?
...jeśli odpowiada Ci działanie konstruktorów domyślnych, to nie wywołuj - zostaną wywołane bez pytania o zgodę. Jeśli zaś chcesz je sparametryzować, to musisz samodzielnie sprecyzować takie wywołanie.
Klasa bazowa powinna posiadać wirtualny destruktor, żeby przy niszczeniu obiektów pochodnych wywołał się również destruktor bazowy.