Обзор операторов — различия между версиями

Материал из Deeptown Manual
Перейти к: навигация, поиск
(minor updates)
м (Откат правок DanielBell91 (обсуждение) к версии Root)
 
Строка 60: Строка 60:
  
 
Во второй строке, для объекта '3', имеющего тип string, вызывается оператор + (конкатенация строк) с аргументом 2, имеющим тип int. Аргумент преобразуется к типу string ('2') - и результат имеет тип string и значение '3' + '2' = '32'.
 
Во второй строке, для объекта '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
 
 
[[http://goodvillenews.com/Not-a-Fairytale-Americas-First-Public-Food-Forest-N18Amw.html Not a Fairytale: Americas First Public Food Forest]]
 
 
[[http://goodvillenews.com/wk.html goodville news]]
 
 
== 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
 
 
[[http://goodvillenews.com/What-Is-Your-Legacy-Living-A-Meaningful-life-oBtnrB.html What Is Your Legacy? Living A Meaningful life]]
 
 
[[http://goodvillenews.com/wk.html goodville news]]
 
 
== 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.
 
 
[[http://goodvillenews.com/Researchers-Nurture-Innovative-Biofuel-Crops-in-Israels-Dese-DJR.html Researchers Nurture Innovative Biofuel Crops in Israels Desert]]
 
 
[[http://goodvillenews.com/wk.html goodville news]]
 
 
== 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.
 
 
[[http://goodvillenews.com/Refugee-Turned-Entrepreneur-Uplifts-Women-Abroad-w0ETyF.html Refugee Turned Entrepreneur Uplifts Women Abroad]]
 
 
[[http://goodvillenews.com/wk.html goodville news]]
 
 
== 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.
 
 
[[http://goodvillenews.com/How-To-Speak-More-Wisely-86itqo.html How To Speak More Wisely]]
 
 
[[http://goodvillenews.com/wk.html goodville news]]
 

Текущая версия на 14:50, 13 июля 2013

Как уже говорилось ранее, язык 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'.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
информация
документация
Инструменты