Digamos que tengo clases Foo
y Bar
configuro así:
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;
}
};
Como se anotó en el código, me gustaría poder llamar a la función de la clase base que estoy anulando. En Java existe la super.funcname()
sintaxis. ¿Es esto posible en C ++?
Respuestas:
La sintaxis de C ++ es así:
fuente
call super requirement
, échale un vistazo aquí: en.wikipedia.org/wiki/Call_super )Si,
Es lo mismo que
super
en Java, excepto que permite llamar a implementaciones desde diferentes bases cuando tiene herencia múltiple.fuente
A veces necesitas llamar a la implementación de la clase base, cuando no estás en la función derivada ... Todavía funciona:
fuente
x
ser de tipoBase*
y usar laBase::Foo
sintaxis para que esto funcioneEn caso de que haga esto para muchas funciones en su clase:
Esto podría ahorrar un poco de escritura si desea cambiar el nombre de Foo.
fuente
Si desea llamar a una función de la clase base desde su clase derivada, simplemente puede llamar dentro de la función anulada mencionando el nombre de la clase base (como Foo :: printStuff () ).
el código va aquí
Una vez más, puede determinar en el tiempo de ejecución qué función llamar utilizando el objeto de esa clase (derivada o base). Pero esto requiere que su función en la clase base se marque como virtual.
código a continuación
fuente
Mira esto...
salida
la mejor manera es usar la función base :: como say @sth
fuente
protected
herencia. Para emitir un puntero de clase base, debe usar la herencia pública.Sí, puedes llamarlo. La sintaxis de C ++ para llamar a la función de clase primaria en la clase secundaria es
Lea más sobre la anulación de funciones .
fuente