Мой профессор попросил меня найти, какие операторы на C++ не могут перегружать и в чем причина этого. Я обнаружил, что точка (.), разрешение области (: :), условные (? :), sizeof() операторы не могут быть перегружены. может ли кто-нибудь объяснить мне причину этого?о перегрузке оператора
ответ
struct Troll
{
int money = 0;
int problems = 0;
float cant_touch_this = 0.0;
int& operator.(const std::string& member_name)
{
if (member_name == "money")
return problems;
else if (member_name == "problems")
return money;
else if (member_name == "cant_touch_this")
throw cant_touch_this;
else
throw 0;
}
};
int main()
{
Troll t;
t.money = 42;
t.problems = 3;
}
При написании выше фрагмент кода , что, безусловно, не компилируется, я задал себе несколько вопросов:
- Что должно быть
operator.
возвратного типа? - Какой параметр следует использовать?
- Как я обрабатываю случаи, когда я бросаю?
- Зачем мне нужно время выполнения, чтобы оценить член времени компиляции?
- Будут ли другие разработчики в порядке со мной троллиться, переключая мои участники?
- Этот список можно продолжить ...
Это столько же причины, почему вы не можете перегрузить точку (.) Оператор, и есть подобные вопросы вы бы спросить себя, пытаясь перегрузить НЕРАСПРОСТРАНЕНИЕ перегружаемых операторов.
Умный ум может найти достойные ответы на эти вопросы, но этот ум либо еще не родился, а не член комитета C++, а не поклонник стандартного предложения или просто не заботится, потому что он не нужна эта функция.
, но мы можем перегрузить -> оператор, который используется для цели компилятора. Зачем? –
@AbhijithPHaridas 'operator->' состоит из 'operator *' then 'operator.', когда вы перегружаете' operator-> ', вы только перегружаете часть' operator * ', на самом деле вы вынуждены возвращать указатель который компилятор будет разыменовывать, а затем использовать его собственную собственную и божественную мощную реализацию 'operator.' См. http://stackoverflow.com/q/4421706/1147772. – Drax
- 1. Вопросы о перегрузке оператора
- 2. Вопрос о перегрузке оператора +
- 3. Путаница о перегрузке оператора присваивания
- 4. Запрос о перегрузке оператора в Python
- 5. Вопрос о неявной перегрузке оператора в C#
- 6. Приоритет оператора при перегрузке оператора?
- 7. Приоритет оператора при перегрузке
- 8. Использование() при перегрузке оператора
- 9. Ошибка при перегрузке оператора =
- 10. Ошибка сегментации при перегрузке оператора
- 11. Ошибка при перегрузке оператора Groovy
- 12. (C#) Проблемы при перегрузке оператора ==
- 13. Ошибка при перегрузке оператора ввода
- 14. Странное поведение при перегрузке оператора?
- 15. Что означает «&» при перегрузке оператора
- 16. Матричное умножение при перегрузке оператора
- 17. Ошибка при перегрузке оператора + = с ++
- 18. Вызов функции при перегрузке оператора?
- 19. Деструктор вызывается при перегрузке оператора
- 20. Confused о перегрузке метода
- 21. Сообщение о перегрузке C#
- 22. Устранение временных ситуаций при перегрузке оператора
- 23. Какова роль «&» и «*» при перегрузке оператора?
- 24. Корректность верности при перегрузке оператора C++ возвращает
- 25. Обнаружение утечки памяти при перегрузке нового оператора?
- 26. Ошибка при перегрузке оператора «>>»
- 27. Вопрос о полиморфизме и перегрузке
- 28. Общий запрос о перегрузке метода
- 29. CA 2225 при перегрузке длинного оператора
- 30. Нечеткий синтаксис C++ при перегрузке оператора
http://www.stroustrup.com/bs_faq2.html#overload-dot –
Я просматриваю вчера сайты веб-сайтов. Объяснений на этих веб-сайтах слишком сложно понять. Если вы можете объяснить это проще, сделайте это –
Он является создателем C++, почему бы вам не хотеть ответа прямо из уст лошади? – CoryKramer