Digamos que eu tenha aulas Foo
e Bar
configure desta forma:
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;
}
};
Conforme anotado no código, gostaria de poder chamar a função da classe base que estou substituindo. Em Java, há a super.funcname()
sintaxe. Isso é possível em C ++?
Respostas:
A sintaxe do C ++ é assim:
fonte
call super requirement
, confira aqui: en.wikipedia.org/wiki/Call_super )Sim,
É o mesmo que
super
em Java, exceto que permite chamar implementações de bases diferentes quando você tem herança múltipla.fonte
Às vezes, você precisa chamar a implementação da classe base, quando você não está na função derivada ... Ainda funciona:
fonte
x
para ser do tipoBase*
e usar oBase::Foo
sintaxe para este ao trabalhoApenas no caso de você fazer isso para muitas funções em sua classe:
Isso pode economizar um pouco de escrita se você quiser renomear Foo.
fonte
Se você quiser chamar uma função da classe base de sua classe derivada, basta chamar dentro da função substituída mencionando o nome da classe base (como Foo :: printStuff () ).
código vai aqui
Novamente, você pode determinar, em tempo de execução, qual função chamar usando o objeto dessa classe (derivada ou base). Mas isso requer que sua função na classe base precise ser marcada como virtual.
código abaixo
fonte
verifique isso ...
resultado
a melhor maneira é usar a base :: function como say @sth
fonte
protected
herança. Para converter um ponteiro de classe base, você deve usar a herança pública.Sim, você pode chamá-lo. A sintaxe C ++ para chamar a função de classe pai na classe filho é
Leia mais sobre a substituição de função .
fonte