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

Пример 6.2.1. Программа, использующая порождение public.

////////////////////

// C++/CLI

#include "stdafx.h"

using namespace System;

class A

{

int x;

public:

char y;

A() {x= 10; y= 'f';}

void Set (int x, char у) {A::x= x; A::y= у;}

void Get (int &x, char &y) {x= A::x; y= A::y;}

Void Show ()

{

System::Console::WriteLine ("x= {0} y= {1}", x.ToString(),Char (y));

}

};

class B: public A

{

int z;

public:

B() {A(); z= 20;}

void Set(int z, int x, char y) {A::Set(x,y); B::z= z;}

void Get(int &z, int &x, char &y) {z= B::z; A::Get(x,y);}

Void Show()

{

System::Console::Write ("z= {0} ", z.ToString());

A::Show();

}

};

Int main() // Главная статическая функция

{

B *pObjB= new B;

pObjB -> Show();

pObjB -> Set(1, 2, 'a');

pObjB -> Show();

}

Результат:

z= 20 x= 10 y= f

z= 1 x= 2 y= a

6.3Наследование управляемых классов в C++/CLI, C# и Java

C# и Java. В отличие от языка С++, позволяющего множественное наследование классов и интерфейсов, языки C# и Java разрешают наследование порождённым классом только одного базового класса и множественное наследование интерфейсов.

C++/CLI. Так же как и в языках C# и Java, в языке C++/CLI применительно к управляемым классам также разрешается наследование порождённьт классом только одного базового класса и множественное наследование интерфейсов.

В языках C# и Java правила наследования упрощены - в списке порождения не указывается допуск порождения, то есть в отличие от языка C++/CLI порождение не управляется и доступ порождения считается равным public.

C#.

class имя-порожд-класса : {имя-баз-класса| имя-баз-класса [, имя-интерф] ...|

имя-интерф [,имя-интерф ] ... }

{

объявление данных, функций, свойств и событий

};

Java.

class имя-порожд-класса [extends имя-баз-класса]

[implements имя-интерф [,имя-интерф ] ... ]

{

объявление данных и функций

};

Правила доступа в порождённом классе к членам базового класса в языках C# и Java просты:

  • члены базового класса с доступом private не доступны в порождённом классе;

  • члены базового класса с доступом protected доступны в порождённом классе и не доступны вне класса;

  • члены базового класса с доступом public доступны в порождённом классе и вне класса к объектам этого класса.

Рисунок 6.3.1 поясняет доступ к членам базового класса из порождённых классов.

Рис. 6.3.1. Доступ к наследуемым членам базового класса в C# и Java

C++/CLI. Класс, определённый с ключевым словом sealed (конечный), не допускает дальнейшего порождения из него классов

C#. Класс, определённый с ключевым словом sealed (конечный), не допускает дальнейшего порождения классов из этого класса.

Java. Класс, определённый с ключевым словом final (конечный), не допускает дальнейшего порождения классов из этого класса.

6.4Использование конструктора базового класса

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

При создании объекта класса, порождённого из некоторого базового класса, сначала выполняется конструктор базового класса, а затем конструктор порождённого класса. Если базовый и порождённые классы имеют конструкторы с параметрами, то в конструкторе порождённого класса необходимо указать список аргументов, передаваемых в соответствующий перегруженный конструктор базового класса. В этом случае применяется конструктор со списком инициализации:

C++/CLI

имя-порожд-констр (список-парам) : имя-баз-констр (список-арг)

[ , имя-баз-констр (список-apr) ] ...

{ тело конструктора }

C#

имя-порожд-констр (список-парам) : base (список-арг)

{ тело конструктора }