- •Инкапсуляция
- •Разновидности классов
- •Пример: Игра в карты
- •Интерфейс и реализация
- •Классы и методы в языке Java
- •Ключевое слово this
- •Функции-члены
- •Данные члены и управление доступом к элементам классов.
- •Способ создания и инициализация
- •Констукторы и массивы объектов
- •Деструктор
- •Конструктор копирования
- •Создание и инициализация на языке Java
- •Примет класса - Строка
Классы и методы в языке 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 обозначает не указатель на объект, а собственно объект.