06 de juny 2006

[c++] ocultació de funcions quan s'hereda i es sobrecarrega

En C++ pot passar el següent: heredem una classe i sobrecarreguem una funció... llavors la funció de la superclasse queda amagada i dona errors de compilació: error: no matching function for call to `a::next()'.
Exemple:

class a
{
public:
void next(); // Aquesta funció queda amagada per b::next(int)
}

class b: public a
{
public:
void next(int i);
}

La sol·lució és redeclarar la funció de la superclasse en la subclasse i fer que cridi a la funció de la superclasse. Exemple:

class b: public a
{
public:
void next(){ a::next();};
void next(int i);
}