У меня были функции, которые должны были принимать идентификационный номер (целое число), но я заметил, что случайно передавал идентификационные номера разных вещей, что нарушало мою программу. Поэтому я попытался сделать что-то вроде следующего, чтобы сделать его безопасным для типов:
struct Number
{
int ID;
int operator =(const int& rhs) { ID = rhs; }
}
struct DogID : Number { }
struct CatID : Number { }
void functionTakingDogID(DogID ID) { }
void functionTakingCatID(CatID ID) { }
int main()
{
DogID dogID;
dogID = 5; // But the = operator overload isn't inherited
}
Единственная причина, по которой я создал классы для хранения чисел, состояла в том, чтобы предотвратить передачу неправильного идентификационного номера. И причина, по которой я использовал наследование от Number, заключается в том, что любые классы, такие как Dog и Cat, можно рассматривать как идентификационный номер (назначенный).
Какой самый простой способ отправить идентификационные номера в функцию, но убедиться, что вы отправляете ей правильные идентификаторы? Я не уверен, что перечислимые классы являются опцией, потому что идентификаторы задаются во время выполнения.
Также я обнаружил, что:
Все перегруженные операторы, кроме присваивания (operator =), наследуются производные классы.
Является ли причиной того, что оператор = является единственной перегрузкой оператора, не унаследовано то, что это считалось слишком рискованным, учитывая, что у производных классов могут быть дополнительные члены?