Я хотел бы иметь несколько типов, которые используют одну и ту же реализацию, но все еще имеют разные типы в С++.
Чтобы проиллюстрировать мой вопрос простым примером, я хотел бы иметь класс для яблок, апельсинов и бананов, имеющих все те же операции и одну и ту же реализацию. Я бы хотел, чтобы у них были разные типы, потому что я хочу избежать ошибок благодаря безопасности типов.
class Apple {
int p;
public:
Apple (int p) : p(p) {}
int price () const {return p;}
}
class Banana {
int p;
public:
Banana (int p) : p(p) {}
int price () const {return p;}
}
class Orange ...
Чтобы не дублировать код, похоже, что я мог бы использовать базовый класс Fruit и наследовать его:
class Fruit {
int p;
public:
Fruit (int p) : p(p) {}
int price () const {return p;}
}
class Apple: public Fruit {};
class Banana: public Fruit {};
class Orange: public Fruit {};
Но тогда конструкторы не наследуются, и я должен их переписать.
Есть ли какой-либо механизм (typedefs, templates, inheritance...), который позволит мне легко иметь один и тот же класс с разными типами?