Pytanie 1)konstruktora C++ Baza wywołanie z parametrem, który zostanie zbudowany w konstruktora pochodzącego
class Base {
Base(std::string name);
virtual std::string generateName();
}
class Derived : Base {
Derived();
virtual std::string generateName();
}
tu pojawia się pytanie:
jaka metoda zostanie wywołana na generateName()?
Derived :: Derived : Base(generateName()) {
//what method will be called on generateName() ?
}
PYTANIE 2)
jak mam to zrobić? jeśli domyślny konstruktor musi zaakceptować parametr, ale muszę wygenerować ten parametr w konstruktorze pochodnym?
Byłoby to prawdą, gdyby 'generateName()' było wywoływane z * wewnątrz * 'Base :: Base'. Ale tutaj wywołujemy go na liście inicjalizacyjnej, zanim wejdziemy do 'Base :: Base'. Czy to nadal prawda? –
Ach, zaktualizowałeś swoją odpowiedź. Czuje się teraz, więc +1. –
@Oli: Nie. Myliłem się i poprawiłem odpowiedź po zbadaniu problemu i wykonaniu niektórych testów. Jestem nieco zaskoczony określonym zachowaniem. Czuję się niesłusznie ;-) (Łamie model, który generalnie stosowałem do wywoływania wirtualnych wywołań funkcji podczas budowy i teraz muszę wrócić i znaleźć wszystkie odpowiedzi, w których źle opisałem proces. .) Dziękujemy za przesłuchanie oryginalnej odpowiedzi. –