русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Вызов метода


Дата добавления: 2015-06-12; просмотров: 593; Нарушение авторских прав


Это приведение возникает в случае, когда вызывается метод с объяв­ленными параметрами одних типов, а при вызове передаются аргументы других типов. Объявление методов рассматривается в следующих лекциях курса, однако такой простой пример вполне понятен:

// объявление метода с параметром типа long voidcalculate(long I) {}

void main() {calculate(5); }

Как видно, при вызове метода передается значение типа int, а не long, как определено в объявлении этого метода.

Здесь компилятор предпринимает те же шаги, что и при приведении g процессе присвоения значений переменным. Если типы образуют за­прещенное преобразование, возникнет ошибка.

// пример вызовет ошибку компиляции

void calculate(long а) {}

void main() {calculate(new Long(5)); // здесь будет ошибка}

Если сужение, то компилятор не сможет осуществить приведение и потребуются явные указания.

void calculate(int а) {}

void main() {long a=5;

// calculate(a); // сужение! так будет ошибка.

calculate((int)a); // корректный вызов }

Наконец, в случае расширения, компилятор осуществит приведение сам,как и было показано в примере в начале этого раздела.

Надо отметить, что, в отличие от ситуации присвоения, при вызове Методов компилятор не производит преобразований примитивных значе­ний от byte, short, char или int к byte, short или char. Это привело бы к умножению работы с перегруженными методами. Например:

// пример вызовет ошибку компиляции

// объявляем перегруженные методы // с аргументами (byte, int) и (short, short) int m(byte a, int b) {return a+b;} int m(short a, short b) {return a-b;}

void main() {print(nn(12, 2)); // ошибка компиляции! }

в этом примере компилятор выдаст ошибку, так как при вызове аргументы имеют тип (Int, int), а метода с такими параметрами нет. Если бы компилятор проводил преобразование для целых величин, подобно ситуации с присвоением значений, то пример стал бы корректным, но пришлось бы прилагать дополнительные усилия, чтобы указать, какой из двух возможных перегруженных методов хотелось бы вызвать.



Аналогичное преобразование потребуется при возвращении значения из метода, если тип результата и заявленный тип возвращаемого значения не совпадают.

longget(){ return 5; }

Хотя в выражении return указан целочисленный литерал типа Int, во всех местах, где будет вызван этот метод, будет получено значение типа long. Для такого преобразования действуют те же правила, что и для при­своения значения.

В заключение рассмотрим пример, включающий в себя все рассмот­ренные случаи преобразования:

short get(Parent р) {

return 5+'А'; // приведение при возвращении значения }

void main() {

long а = // приведение при присвоении значения get(newChild()); // приведение при вызове метода

}

Явное приведение

Явное приведение уже многократно использовалось в примерах. При таком преобразовании слева от выражения, тип значения которого необходимо преобразовать, в круглых скобках указывается целевой тип. Если преобразование пройдет успешно, то результат будет точно указан­ного типа. Примеры:

(byte)5

(Parent)newChild()

(Flat)getClty{).getStreet().getHouse().getFlat()

Если комбинация типов образует запрещенное преобразование, возникает ошибка компиляции. Допускаются тождественные преобразо­вания, расширения простых и объектных типов, сужения простых и объ­ектных типов. Первые три всегда выполняются успешно. Последние два могут стать причиной ошибки исполнения, если значения оказались несо­вместимыми. Как следствие, выражение null всегда может быть успешно прeoбpaзoвaнo к любому ссылочному типу.

Но можно найти способ все-таки закодировать запрещенное преоб­разование.

Child c=newChlld();

// Chlld2 c2=(Child2)c; // запрещенное преобразование

Parent р=с; // расширение

Child2 c2=(Chlld2)p; // сужение

Такой код будет успешно скомпилирован, однако, разумеется, при исполнении он всегда будет генерировать ошибку в последней строке. "Обманывать" компилятор смысла нет.

Оператор конкатенации строк

Этот оператор уже рассматривался достаточно подробно. Если обо­ими его аргументами являются строки, то происходит обычная конкате­нация. Если же тип String имеет лишь один из аргументов, то второй не­обходимо преобразовать в текст. Это единственная операция, при кото­рой производится универсальное приведение любого значения к типу String.

Это одно из свойств, выделяющих класс String из общего ряда.

Правила преобразования уже были подробно описаны в этой лекции, а оператор конкатенации рассматривался в лекции "Типы данных".

Небольшой пример:

int 1=1;

double d=i/2.;

String s="text";

print("i="+i+", d="+d+", s="+s);

Результатом будет:

i=1,d=0.5, s=text



<== предыдущая лекция | следующая лекция ==>
Присвоение значений | Тип переменной и тип ее значения


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.153 сек.