Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 16.doc
Скачиваний:
15
Добавлен:
11.04.2015
Размер:
169.98 Кб
Скачать

Классы и методы в языке Java

Трудно сказать, возможно язык Java (не путать с технологией Java) можно описать как диалект языка С++. В них много общего, но и много отличий. Язык Java не имеет указателей, ссылок (точнее там все ссылки), структур оператора goto, функций (только методы) и перегрузки операторов. Он поддерживает строки как примитивный тип данных и выполняет сборку мусора. Сам Java язык общего назначения, но основное его использование в области Internet и сетевых распределенных приложений. Мы не затрагиваем эти аспекты совсем и только касаемся языка. Рассмотрим класс на Java Листинг 3.3. class card { // статические значения цветов и мастей final public int red =0; final public int black =0; final public int spade =0; final public int heart =1; final public int diamond =2; final public int club =3; // поля данных private boolean faceup; private int r; private int s; // конструктор card(int sv,int rv) { s=sv; r=rv; faceup=false; } // доступ к атрибутам карты public int rank() { return r; } public int suit() { return s; } public int color () { if( suit()==heart || suit()==diamond) return red; else return black; } public boolean faceUp() { return faceup; } public void draw (Graphics g, int x, int y) { /* */ } public void flip() { faceup != faceup; } }; Описание класса на языке Java очень похоже, за исключением нескольких моментов

  • Отсутствие препроцессора, глобальные переменные, перечисляемые типы данных. Символьные константы могут быть созданы и инициализированы с помощью ключевого слова final. Такие значения не могут изменяться.

  • Реализация методов проводится непосредственно внутри определения класса. Вместо разбиения описания класса на public и private эти ключевые слова присоединяются в явном виде к каждой переменной или методу.

  • Логический тип данных, именуемый boolean вместо bool.

  • За исключением конструкторов все методы должны иметь возвращаемое значение

Ключевое слово this

Нестатические функции-члены класса оперируют с тем объектом типа класса, из которого они вызваны. Ключевое слово this обозначает специальную локальную переменную, доступную в теле любой функции-члена класса, описанной без спецификации static. Переменная this не требует описания и всегда содержит указатель соответствующего объекта.

  • this->имя члена указывает на объект, членом, которого он является.

  • *this представляет собой сам объект и, в зависимости от контекста, может быть лево- или правосторонней величиной

  • this представляет собой адрес объекта.

Пример class C { int c1,c2; public: void init(int b) { c2=b; c1=b+1; } C & inc() { c1++; c2++; return *this; } void *adress() { return this; } void print() { cout << c1 << c2; } }; void main(void) { C a; a.init(10); a.print(); cout << “ adress=“ << a.adress<< “ inc “ << a.inc().print() << endl; } Указатель на объект, для которого вызвана функция-член, является скрытым параметром функции. На этот неявный параметр можно ссылаться явно как на this. В каждой функции класса x указатель this неявно описан как x* this; и инициализирован так, что он указывает на объект, для которого была вызвана функция-член. this не может быть описан явно, так как это ключевое слово. Класс x можно эквивалентным образом описать так:

class x { int m; public: int readm() { return this->m; } };

class x { int m; public: int readm() { return m; } };

В языке Java this обозначает не указатель на объект, а собственно объект.