Допустим, у меня есть следующие классы:
class A {
};
class B : public A {
};
class C : public A {
};
class BaseClass {
public:
virtual void dummy(A* a) = 0;
};
class DerivedClass1 : public BaseClass {
public:
void dummy(B* b);
};
class DerivedClass2 : public BaseClass {
public:
void dummy(C* c);
};
Как видите, B
и C
наследуют от A
, а DerivedClass1
и DerivedClass2
наследуют от BaseClass
.
Из-за моего понимания такое объявление функции dummy()
недопустимо, поскольку аргументы изменились, хотя B
и C
получены из A
.
Как правильно это сделать?
Можно было бы оставить аргументы такими, какими они были в BaseClass
, и просто потом выполнять приведение в функции dummy
, но я думаю, это не очень хорошо.
В противном случае, просто не производите dummy
(и удалите его из BaseClass
), поэтому оба класса DerivedClass1
и DerivedClass2
объявляют их независимо. Но тогда идея всех классов, полученных из BaseClass
, должна реализовывать пустышку, теряется.