Я хотел бы иметь несколько типов, которые имеют одну и ту же реализацию, но по-прежнему относятся к разному типу в C ++.
Чтобы проиллюстрировать свой вопрос на простом примере, я хотел бы иметь класс для яблок, апельсинов и бананов, у всех одинаковые операции и одинаковая реализация. Я бы хотел, чтобы у них были разные типы, потому что я хочу избежать ошибок благодаря безопасности типов.
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 {};
Но тогда конструкторы не наследуются, и мне приходится их переписывать.
Есть ли какой-либо механизм (определения типов, шаблоны, наследование ...), который позволил бы мне легко иметь один и тот же класс с разными типами?