Перегрузка виртуальной функции в дочернем классе

Я просто тестирую виртуальные ключевые слова и концепции наследования в C ++. Я написал небольшую программу:

#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;
}

Здесь я перегрузил виртуальную функцию в родительском классе в дочернем классе! Разве это не правильно?

Я получаю следующие ошибки компиляции:

«temp10.cc», строка 45: Ошибка: слишком много аргументов при вызове «cna_MO :: print ()».

13
задан Luc Touraille 11 January 2012 в 09:48
поделиться