Обзор операторов
Как уже говорилось ранее, язык K++ является полностью объектно-ориентированным языком. Это значит, что в отличие от многих распространенных языков, таких как C, C++ или Паскаль, в нем нет понятия простейших типов данных. То есть, любая переменная является объектом, и даже любая константа в выражении является скрытым созданием объекта. Так, например, при вычислении значения переменной i в выражении <source lang="kpp"> var i = "Hello, world!".length(); </source>
создается объект класса string со значением "Hello, world!", и для него вызывается метод length().
Рассмотрим другой пример: <source lang="kpp"> var i = 3+5; </source>
Что происходит в этом случае?
Для того, чтобы это понять, обратимся к концепции ООП. В соответствии с этой концепцией, каждый класс представляет собой описание данных и методов, работающих с этими данными. Таким образом, для того, чтобы описать класс целых чисел - int, нужно, в часности, определить метод их сложения.
Для того, чтобы это сделать, можно было бы написать примерно следующий код: <source lang="kpp"> class int {
public const function int add(const int x) { // возвращаем сумму текущего объекта и объекта x }
} </source>
В этом случае, для того, чтобы найти сумму двух чисел, нужно было бы написать: <source lang="kpp"> var i = x1.add(x2); </source>
или, в предыдущем примере, <source lang="kpp"> var i = 3.add(5); </source>
Этот код вполне справляется с поставленной перед ним задачей, но у него есть один большой недостаток: он некрасив и сложно читаем. Язык программирования создается для человека, а человеку гораздо удобнее написать математический оператор сложения "3+5", чем довольно сложную и замысловатую конструкцию "3.add(5)".
Поэтому, в язык K++ введено специальное понятие - оператор.
Как видно из предыдущего примера, оператором сложения может служить метод, принимающий один параметр. В общем случае, оператором является метод, имеющий определенное название и удовлетворяющий определенным правилам относительно количества параметров и типа возвращаемого значения.
Более подробно о различных типах операторов и о способе их объявления и перезагрузки будет рассказано в данном разделе книги. Здесь же следует отметить несколько важных моментов.
Поскольку оператор является методом, то и правила вызова оператора такие же, как правила вызова метода. Таким образом,
- аргументы, передаваемые оператору, автоматически преобразуются к соответствующим типам, если это необходимо;
- если объект, для которого вызывается оператор, имеет динамический тип, то для вызова оператора будет сгенерирован динамический код.
Первое из этих правил следует обсудить отдельно.
Рассмотрим следующий код: <source lang="kpp"> var i1 = 2 + '3'; var i2 = '3' + 2; </source>
Какие типы и значения будут у переменных i1 и i2 в результате выполнения этого кода?
В первой строке, для объекта 2, имеющего тип int, вызывается оператор + с аргументом '3', имеющим тип string. При этом, аргумент преобразуется к типу int - и результат имеет тип int и значение 2+3 = 5.
Во второй строке, для объекта '3', имеющего тип string, вызывается оператор + (конкатенация строк) с аргументом 2, имеющим тип int. Аргумент преобразуется к типу string ('2') - и результат имеет тип string и значение '3' + '2' = '32'.
Содержание |
Not a Fairytale: Americas First Public Food Forest
Hungry? Just head over to the park. Seattles new food forest aims to be an edible wilderness. Seattles vision of an urban food oasis is going forward. A seven-acre plot of land in the citys Beacon Hill neighborhood will be planted with hundreds of different kinds of edibles
[Not a Fairytale: Americas First Public Food Forest]
What Is Your Legacy? Living A Meaningful life
I want the world to be better because I was here. I want my life, I want my work, my family, I want it to mean something and if you are not making someone elses life better then you are wasting your time Will Smith
[What Is Your Legacy? Living A Meaningful life]
Researchers Nurture Innovative Biofuel Crops in Israels Desert
Fears of global warming and its impact on our environment have left scientists scrambling to decrease levels of atmospheric carbon we humans produce. Now, Tel Aviv University researchers are doing their part to reduce humanitys carbon footprint by successfully growing forests in the most unlikely place deep in Israels Aravah Desert.
[Researchers Nurture Innovative Biofuel Crops in Israels Desert]
Refugee Turned Entrepreneur Uplifts Women Abroad
While some retailers have struggled in the recession, Amber Chand, an online retailer of items made by women living in war-torn countries, is experiencing success."As the economy was going into a downturn during the holiday season, which is my primary season, I noticed actually that my company was increasing in terms of sales and revenues, and we grew by 22 percent," says Chand.
[Refugee Turned Entrepreneur Uplifts Women Abroad]
How To Speak More Wisely
It had been three weeks since my throat started to feel sore, and it wasnt getting better. The pain was most acute when I spoke. So I decided to spend a few days speaking as little as possible. Every time I had the urge to say something, I paused for a moment to question whether it was worth irritating my throat.
[How To Speak More Wisely]