Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

Пример 2.4.1. Класс cColBall, наследуемый класс cBall.

//C++/CLI

class CColBall : public CBall // Порождение из класса CBall

{

private: // Закрыть данные

int col; //Цвет

public: // Открыть функции

void Set (int vCol, int vX, int vY) // Функция 1Установить данные'

{ col= vCol; CBall::Set (vX, vY);}

void Show ( ) // Функция 'Показать данные'

{ Console::Write ("col= " + col); CBall::Show ();}

};

// c#

class CColBall : CBall // Порождение из класса CBall

{

private int col; // Закрытая переменная цвет

public void Set (int vCol, int vX, int vY) // Открытая функция

{col=vCol; base.Set(vX,vY);} // 'Установить данные'

public void Show ( ) // Открытая функция ' Показать данные'

{Console.Write ("col= " + col); base.Show ();}

}

// Java и J#

public class CColBall extends CBall // Порождение из класса CBall

{

private int col; // Закрытая переменная цвет

public void Set (int vCol, int vX, int vY) // Открытая функция

{

col= vCol; super.Set (vX, vY); // 'Установить данные'

}

public void Show ( ) // Открытая функция ' Показать данные'

{

System.out.println ("col= "+ col); super.Show ();

}

}

Класс CColBall включает дополнительную переменную col и обновлённые функцию Set(), список параметров которой дополнен параметром vCol, и функцию Show(). Функции Set() и Show() производного класса CColBall вправе воспользоваться наследуемыми доступными функциями Set() и Show() базового класса CBall. Но чтобы отличить их от одноимённых функций своего класса, необходимо использовать специальный оператор привязки: в языке C++/CLI - "Имя_род_класса::" (два двоеточия), а в языках Java и C# - соответственно ключевые слова super и base.

Тело функции Set() класса CColBall присваивает значение новой переменной col и посредством функции Set() класса CBall присваивает значения закрытым переменным базового класса CBall (оператор привязки "::" и ключевые слова super и base соотносят функцию Set() к классу CBall). Аналогично функция Show() класса CColBall использует функцию Show() базового класса CBall, чтобы выдать скрытые значения x и у. Функция Move() класса CColBall наследуется из класса CBall , оставшись неизменённой.

C++/CLI. При описании порождённого класса после его имени стоит ":" (двоеточие), за которым следует список порождения. В списке порождения через запятые перечисляются все наследуемые базовые классы. В нашем случае список включает только один базовый класс CBall с доступом порождения public. При ссылке в порождённом классе к наследуемым функциям базового класса использован оператор привязки "::" (два двоеточия).

Java. При описании порождённого класса после имени класса помещается ключевое слово extends и затем указывается имя только одного наследуемого базового класса, поскольку в языке Java запрещено множественное наследование. У нас этим классом является класс CBall. При ссылке к функциям базового класса использовано ключевое слово super.

C#. При описании порождённого класса после имени класса ставится двоеточие и затем указывается имя только одного наследуемого базового класса, поскольку, как и в языке Java, в языке C# запрещено множественное наследование. При ссылке к функциям базового класса использовано ключевое слово base.

Полиморфизм (polymorphism) заключается в обозначении одного и того же действия одним именем, которое используется во всей иерархии порождения классов. Например, базовый и производный классы примера 2.4.1 имеют одноимённые функции установки Set(), хотя реализованы эти функции по-разному. Разумеется, обращаться к этим функциям надо соответствующим образом.

В примере 2.4.2 показано использование объектов класса CBall и CColBall.