В моем коде, я эти классы реализованы:C++: Вызов метода ребенка от родительского экземпляра
class A
{
public:
virtual int fun() { return 0; }
}
class B : public A
{
public:
virtual int fun() { return 1; }
}
И эти функции:
void operation(A a)
{
printf("%d\n",a.fun());
}
int main()
{
B b;
operation(b);
return 0;
}
Как вы можете видеть, класс B наследует от A и реализует виртуальный унаследованный метод fun()
. Основной класс вызывает функцию, которая принимает параметры A и вызывает метод fun()
, с аргументом B в аргументе.
На исполнение я ожидаю, что будет напечатана строка "1"
, но это "0"
, которая (даже если это объект B, который передается operation()
).
Мне нужно сделать это, потому что у меня есть несколько классов B (B1, B2 и т. Д.), И я хочу, чтобы функция operation()
была общей. Мне не нужна реализация operation()
в классе A, но если я объявляю operation()
чистым виртуальным, компиляция завершится с ошибкой operation()
, говоря, что я не могу создать экземпляр A (это вполне ожидаемо).
Я нашел много тем, говорящих о вызовах и наследования родительских/дочерних методов, но никто из них не говорил об этой проблеме точно.
Может кто-нибудь мне помочь?
Спасибо.
Осторожно: для конструкции объекта по умолчанию вы не должны использовать круглые скобки. 'B b()' не называет 'B' по умолчанию c'tor, но объявляет функцию' b', которая не принимает аргументов и возвращает объект класса 'B'. –
Это просто ошибка, которую я сделал, когда написал этот упрощенный пример кода – Vultrao