Как я могу сгруппировать общий код в двух классах, которые имеют одинаковые определения, но различаются типы одной перемC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как я могу сгруппировать общий код в двух классах, которые имеют одинаковые определения, но различаются типы одной перем

Сообщение Anonymous »

У меня есть два класса: Motor_Distance и Motor_Displacement, которые содержат идентичный код, однако тип переменной-члена count и тип возвращаемого значения метода доступа convToCount равны единственная разница.
В Motor_Displacement count имеет длинное значение, поскольку оно может быть как отрицательным, так и положительным.
В Motor_Distance, count — это беззнаковое длинное значение, поскольку оно не может быть отрицательным. Таким образом, он беззнаковый, поэтому я могу хранить более высокие положительные значения счетчика.
Вот код:

Код: Выделить всё

constexpr double pi = 3.14159;

class Motor_Distance{
private:
unsigned long count;
float wheel_diameter;
unsigned int pulses_per_revolution;

public:
unsigned long convToCount(){ return count; }

float convToMeters(){
return  convToCount() * pi * wheel_diameter / pulses_per_revolution;
}
};

class Motor_Displacement{
long count;
float wheel_diameter;
unsigned int pulses_per_revolution;
public:

long convToCount(){ return count; }

float convToMeters(){
return  convToCount() * pi * wheel_diameter / pulses_per_revolution;
}
};

int main(){
}
Поскольку оба класса содержат повторяющийся код, и я хочу удалить этот повторяющийся код. Я мог бы добиться этого, используя базовый класс шаблона следующим образом:

Код: Выделить всё

constexpr double pi = 3.14159;

template
class Motor_Travel{
Travel_Type count;
float wheel_diameter;
unsigned int pulses_per_revolution;
public:

Travel_Type convToCount(){ return count; }

float convToMeters(){
return  convToCount() * pi * wheel_diameter / pulses_per_revolution;
}
};

class Motor_Distance : public Motor_Travel{};
class Motor_Displacement : public Motor_Travel{};

int main(){
}
Есть ли способ сделать то же самое (сгруппировать/удалить повторяющийся код) без использования шаблонов?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -same-defi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»