Powiedzmy, że mam zajęcia Foo
i Bar
skonfigurowałem tak:
class Foo
{
public:
int x;
virtual void printStuff()
{
std::cout << x << std::endl;
}
};
class Bar : public Foo
{
public:
int y;
void printStuff()
{
// I would like to call Foo.printStuff() here...
std::cout << y << std::endl;
}
};
Jak napisano w kodzie, chciałbym móc wywołać funkcję klasy bazowej, którą zastępuję. W Javie jest super.funcname()
składnia. Czy jest to możliwe w C ++?
Odpowiedzi:
Składnia C ++ wygląda następująco:
źródło
call super requirement
, sprawdź to tutaj: en.wikipedia.org/wiki/Call_super )Tak,
Jest taki sam jak
super
w Javie, z tą różnicą, że pozwala na wywoływanie implementacji z różnych baz, gdy masz wiele elementów dziedziczenia.źródło
Czasami trzeba wywołać implementację klasy podstawowej, gdy nie ma się funkcji pochodnej ... Nadal działa:
źródło
x
typem, jakBase*
i użyćBase::Foo
składni, aby to zadziałałoNa wypadek, gdybyś zrobił to dla wielu funkcji w swojej klasie:
To może zaoszczędzić trochę pisania, jeśli chcesz zmienić nazwę Foo.
źródło
Jeśli chcesz wywołać funkcję klasy bazowej z jej klasy pochodnej, możesz po prostu wywołać funkcję nadpisaną z podaniem nazwy klasy bazowej (jak Foo :: printStuff () ).
kod idzie tutaj
Ponownie możesz określić w czasie wykonywania, którą funkcję wywołać, używając obiektu tej klasy (pochodnej lub podstawowej). Ale to wymaga, aby twoja funkcja w klasie podstawowej musiała być oznaczona jako wirtualna.
kod poniżej
źródło
Sprawdź to...
wynik
najlepszym sposobem jest użycie funkcji base :: jak powiedzmy @sth
źródło
protected
dziedziczenia. Aby rzucić wskaźnik klasy bazowej, musisz użyć dziedziczenia publicznego.Tak, możesz to nazwać. Składnia C ++ do wywoływania funkcji klasy nadrzędnej w klasie potomnej to
Przeczytaj więcej o zastępowaniu funkcji .
źródło