Estoy probando con palabras clave virtuales y conceptos de herencia en C++. He escrito un pequeño programa:Sobrecarga de una función virtual en una clase secundaria
#include<stdio.h>
#include<iostream>
using namespace std;
class cna_MO
{
public:
virtual void print()
{
cout << "cna_MO" << endl;
}
};
class cna_bsc:public cna_MO
{
public:
void print()
{
cna_MO::print();
}
void print(int a)
{
cout << "cna_BSC" << endl;
}
};
class cna_Mo
{
cna_MO *_mo;
public:
cna_Mo()
{
_mo = new cna_bsc;
}
virtual void print(int a)
{
cout << "cna_Mo with arg" << endl;
_mo->print(5);
}
virtual void print()
{
cout << "cna_Mo" << endl;
_mo->print();
}
};
int main()
{
cna_Mo valid_mo;
cout << "old case is started" << endl;
valid_mo.print();
cout << "new case is started" << endl;
valid_mo.print(5);
return 0;
}
Lo que he hecho aquí es que he sobrecargado una función virtual en la clase padre en la clase de niño! ¿No es esto lo correcto?
estoy consiguiendo los errores de compilación de la siguiente manera:
"temp10.cc", line 45: Error: Too many arguments in call to "cna_MO::print()".
Si realmente necesita 'stdio' (no es necesario en el código que proporcionó), [debe incluir' cstdio' en lugar de 'stdio.h'] (http://stackoverflow.com/questions/301586/what-is-the-difference-between-using-includefilename-and-includefilename-h). –
Además, nunca elimina el puntero que asigna en el constructor cna_Mo. –