У меня проблема с правильной обработкой метода переопределения, где присутствует абстрактный класс внутри моей иерархии классов. Попробую объяснить:C++ и наследование в абстрактных классах
class AbstractClass{
public:
virtual void anyMethod() = 0;
};
class A : public AbstractClass {
void anyMethod() {
// A implementation of anyMethod
cout << "A";
}
};
class B : public AbstractClass {
void anyMethod() {
// B implementation of anyMethod
cout << "B";
}
};
AbstractClass *ptrA, *ptrB;
ptrA = new A();
ptrB = new B();
ptrA->anyMethod(); //prints A
ptrB->anyMethod(); //prints B
Ok..previous пример отлично работает .. конкретная реализация метода anyMethod AbstractClass будет вызываться во время выполнения. Но AbstractClass является производным от другого базового класса, который имеет метод не виртуальный под названием anyMethod:
class OtherClass {
public:
void anyMethod() {
cout << "OtherClass";
}
};
class AbstractClass : public OtherClass {
public:
virtual void anyMethod() = 0;
};
//A and B declared the same way as described before.
Теперь, если я попробовать что-то вроде этого:
ptrA = new A();
ptrB = new B();
ptrA->anyMethod(); //prints OtherClass
ptrB->anyMethod(); //prints OtherClass
Что я непонимание? Есть ли какое-либо решение для печати ptrA и ptrB A и B без использования литых, тиреидных и т. Д.?
Отформатируйте свой код – Elalfer
A и B также должны быть напечатаны во втором случае. Вы что-то упустили из своего описания? – vitaut
Я проверил ваш код на g ++, и он печатает A и B в обоих случаях. Используете ли вы 'OtherClass * '? – casablanca