у меня есть проблема с правильной обработкой переопределения метода, когда абстрактный класс присутствует внутри моей иерархии классов. попробую объяснить:
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
Хорошо... предыдущий пример работает нормально... конкретная реализация метода 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 без использования cast, typeid и т. д.?
OtherClass *
? - person casablanca   schedule 24.01.2011class AbstractClass : public Other class
должно бытьclass AbstractClass : public OtherClass
- person Elalfer   schedule 24.01.2011