Один из способов сделать это будет:
class Base {
public:
Base();
virtual ~Base();
virtual void doSomething();
};
class DerivedOne : public Base {
public:
DerivedOne();
void doSomethingElse(int a,struct b);
};
class DerivedTwo : public Base {
public:
DerivedTwo();
virtual void doSomething();
};
Затем вы можете использовать dynamic_cast
для определения типа во время выполнения, поскольку у вас, похоже, есть условное выражение типа где-то в SomeClass
. Методы не равны и принципиально различны. Кроме того, DerivedOne::doSomething
будет скрывать Base::doSomething
.
Обновление
Как уже говорили другие, часто неприятный запах, если ваша программа использует выражения с условными типами. Поскольку в вашем примере недостаточно контекста, чтобы предложить соответствующие решения, нам трудно помочь вам в этом отношении. Если вы заинтересованы в удалении условного типа, одним из многих возможных решений этой проблемы будет:
class Base {
public:
Base();
virtual ~Base();
virtual void doSomething();
};
class DerivedOne : public Base {
public:
DerivedOne();
// ...
virtual void doSomething(); // << no parameters required.
// they have moved to member data:
private:
int a;
b another;
};
class DerivedTwo : public Base {
public:
DerivedTwo();
virtual void doSomething();
};
тогда вы можете удалить условное выражение типа из вашей программы. Если вам нужна помощь в этом отношении, не стесняйтесь задавать здесь или открывать новый вопрос, если считаете, что он более уместен.