Это потому, что функция печати в дочернем классе принимает параметр, а оригинал - нет.
в cna_MO (родительский класс):
virtual void print()
в cna_bsc (дочерний класс):
void print(int a)
По существу, для печати ребенка не должно быть аргумента типа int:
void print()
EDIT:
Возможно, лучшим будетсделать передачу int необязательной?
например:
в cna_MO (родительский класс):
virtual void print(int a=-1) {
if (a == -1) {
// Do something for default param
} else {
cout << a;
}
}
в cna_bsc (дочерний класс):
void print(int a=-1)
так что если == -1, вы, вероятно, можете предположить, что они ничего не передали.
Хитрость в том, что и родитель, и ребенок нуждаются в одинаковом методе сигнатуры, что означает одинаковый тип возвращаемого значения и один и тот же аргументтипы.