Перегрузка оператора C ++ принимает тип указателя в качестве параметра? - PullRequest
3 голосов
/ 23 ноября 2011

Я новичок в C ++ и пытаюсь выяснить разницу между указателем и ссылкой. Я только что прочитал это краткое резюме .

В статье автор упомянул, что day *operator++ (day *d); не будет компилироваться (примечание: day является типом enum), и утверждал, что параметр для этой перегруженной операторной функции должен быть типа T, T & или T const &, где T - тип класса или перечисления.

Я предполагаю, что указатель является встроенным типом, а не классом или перечислением, поэтому его нельзя использовать для перегрузки операторов, а перегрузка операторов невозможна для всех встроенных типов, таких как int и double.

Например, int i = 1; ++i; никогда не приведет к тому, что i будет равен 3, перегружая оператор ++ для типа int.

Я прав? Пожалуйста, помогите мне лучше понять эту проблему.

Ответы [ 2 ]

5 голосов
/ 23 ноября 2011

Первое правило в перегрузке оператора:
Вы не можете перегружать операторы для встроенных типов данных, Вы можете только для своих пользовательских типов данных, поэтому вы правы в этом отношении

4 голосов
/ 23 ноября 2011

Да, указатель является примитивным типом, а не объектом. Это просто числа (адрес памяти объекта, на который они указывают), и поэтому к ним можно применить арифметику.

Да, вы не можете перегрузить операторы для примитивных типов (однако вы можете перегрузить бинарные операторы в классе, который принимает параметр примитивного типа).

...