Sto testando solo con parole chiave virtuali e concetti di ereditarietà in C++. Ho scritto un piccolo programma:Sovraccarico di una funzione virtuale in una classe figlia
#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;
}
Quello che ho fatto qui è che ho sovraccaricato una funzione virtuale nella classe genitore in classe bambino! Non è questa la cosa giusta da fare?
sto ottenendo gli errori di compilazione, come di seguito:
"temp10.cc", line 45: Error: Too many arguments in call to "cna_MO::print()".
Se hai veramente bisogno di 'stdio' (non è necessario nel codice che hai fornito), [dovresti includere' cstdio' piuttosto che 'stdio.h'] (http://stackoverflow.com/domande/301.586/what-is-the-differenze-tra-con-includefilename-e-includefilename-h). –
Inoltre, non si elimina mai il puntatore che si assegna nel costruttore cna_Mo. –