Jump to content

    

Улучшает ли читабельность и позволяет ли избежать ошибок перегрузка операторов

Читаю тут программы, которые были созданы до меня, и их необходимо развивать. . Вообщем все красиво и учится стоит. Но вот перегрузка постфиксного ++ меня несколько смутила. Она не просто сдвигает указатель на сдедущую позицию, но попутно может сделать пару забавных вещей, как то стереть сектор во флеше итп, а вид такой наивный как pchar++., чего то даже не знаю, правильно ли это.

Share this post


Link to post
Share on other sites

Я предпочитаю избегать перегрузки операторов. Это вкусовщина, но можно прикинуть, как по такому коду делать поиск: дебаг превратится в тяжкий кошмар.

Share this post


Link to post
Share on other sites

Перегружать без опаски можно только в очевидных случаях, например, использовать "+=" для добавление объекта в коллекцию, тогда это не вызовет замешательства. Если то что ты сказал действительно так - "++" стирает память, то за такое хорошо бы дать по рукам, потому что ни один человек в здравом уме не догадается, что безобидный постинкремент может что то сотворить с флеш-памятью.

Share this post


Link to post
Share on other sites

Как и любой инструмент - если применять с умом, то приносит пользу. А сдуру можно и х.. сломать.

Share this post


Link to post
Share on other sites

Ну например, для всяких алгебраических типов данных перегрузка операторов однозначно полезна. Вместо какого-нибудь:

c = sqrt(complex_add(complex_mul(a, a), complex_mul(b, b)));

можно записать:

c = sqrt(a * a + b * b);

Существенно улучшает читаемость кода и уменьшает вероятность ошибок. Перегружать операторы конечно надо так, чтоб их семантика была очевидна.

Плохой пример:

MyArray<int> array;
...
array = 10;

Если оператор присваивания перегружен. Что он может делать с массивом? Делает размер массива равным 10? Или присваивает всем элементам массива значение 10? Или только первому элементу?

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this