2015-12-09 2 views
1

Извините за возможный глупый вопрос. Я бы хотел перезаписать мутатор/accesor по умолчанию для переменной класса (используя оператор = вместо обычной номенклатуры set/get. Я хотел бы получить некоторое руководство в этой возможности. Ближайший ресурс, который я нашел для моей проблемы, был this, что дает мне 50% от того, что мне нужно.оператор перегрузки = с типами неклассов

Допустим, у меня есть этот класс (этот код не моя фактическая потребность, но более простой пример того, что я прошу).

class IDCard { 
    int id; 
    int operator=(const int& n_id); // This works for copying 
}; 

/* 
* copy value of id out (no same value check) 
*/ 
int& IDCard::operator=(const int& n_id) { 
    id = n_id; 
    return id; 
} 

Учитывая IDCard my_id , Я могу это сделать: my_id = 10, но я тоже хотел бы это сделать: int i = my_id.

Для этого могу ли я перегрузить что-то в классе IDCard, чтобы вернуть примитив на операторе = или будет работать только для установки объекта класса?

Я не вижу многих случаев, когда это может быть полезно, поскольку это сделает код более неоднозначным, но я преобразовал некоторый код python, который переписал их мутаторы и аксессоры, поэтому я подумал, есть ли у C++ аналогичная возможность.

+1

[Оператор Int() const] (http://en.cppreference.com/w/cpp/language/cast_operator) – crashmstr

ответ

3

Вы можете определить оператор преобразования, чтобы сделать int i = my_id работы:

class IDCard { 
    int id; 
public: 
    operator int() const { return id; } 
}; 

Однако я настоятельно советую против него и рекомендую использовать нормальный акцесор вместо:

class IDCard { 
private: 
    int id_; 
public: 
    int id() const { return id_; } 
}; 
+1

Спасибо, я не понимал, что вы можете это сделать. Я бы тоже не советовал это делать, так как было больно читать код python, который по существу делал это (хотя и с более сложными вызовами, происходящими в фоновом режиме). – d4r3llo5

Смежные вопросы