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

5.Классы

5.1Определение класса

Класс (class) - новый тип данных, определяемый программистом, появившийся в языке С++ и отсутствующий в языке С. Посредством class программист описывает совместно данные и действия над этими данными (функции). Из класса создаются объекты (переменные типа class). При этом данные, принадлежащие объекту некоторого класса, обусловливают состояние этого объекта, а набор функций - его поведение.

В языке С++, используя метки private и public, можно по-разному инкапсулировать (скрывать) данные и функции в классе, запрещая или разрешая доступ к ним извне объекта.

Метка private объявляет данные и функции, описанные после неё, закрьггыми. Эти данные и функции могут использоваться только функциями данного класса.

Метка public объявляет данные и функции класса, описанные после неё, доступными (открытыми) вне объекта внутри блока, в котором объявлен или создан объект этого класса.

В языках же C# и Java сокрытие данных и функций класса определяется не метками, а ключевыми словами private и public. Если при описании класса не применены private и public, то в классе языков С++, C++/CLI и C# по умолчанию данные и функции закрыты (то есть имеют доступ private), а в языке Java (J#) - открыты (то есть имеют доступ public).

Правила описания класса в языках C++/CLI , C# и Java отличаются. Сравните описание класса А и его использование, реализованные на разных языках в примере5.1.1.

Пример 5.1.1. Описание класса и создание его объектов.

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

// C++/CLI

#include "stdafx.h"

using namespace System;

class А // Описание класса А

{

private:

Int X; // Закрытая переменная X

public:

char y; // Открытая переменная у

void Set (int m, char n){x=m; y=n;} // Открытая функция

Void Show ( ) // Открытая функция

{

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

System::Console::WriteLine(gcnew Char(y));

}

};

int main(array<System::String ^> ^args)

{

А objA; // Объект objA класса А размещён в стеке

objA.Set(1,'z'); // Установить значения данных объекта objA

objA.Show(); // Выдать значения данных объекта objA

А *pObjA=new А; // Объект pObjA класса А размещён в неуправл. куче

pObjA -> Set(2,'w'); // Установить данные объекта с указателем pObjA

pObjA -> Show(); // Выдать данные объекта с указателем pObjA

pObjA -> y='b'; // Присвоить значение открытой переменной у

pObjA -> Show();

delete pObjA; // Удалить объект класса А с указателем pObjA

}

Результат:

x= 1 y= 122z

x= 2 y= 119w

x= 2 y= 98b

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

// C#

using System;

class А // Описание класса А

{

Int X; // Закрытая (по умолчанию) переменная X

public char y; // Открытая переменная у

public void Set(int m, char n) { x = m; y = n; } // Открытая функция

public void Show() // Открытая функция

{

Console.Write("x={0}", x.ToString());

Console.Write(" у="); Console.WriteLine(y);

}

}

class Program

{

static void Main(string[] args)

{

А sObjA= new А(); // Объект класса А в управляемой куче

sObjA.Set(2,'w');

sObjA.Show ( );

sObjA.y= 'b';

sObjA.Show();

}

}

Результат:

x=2 у=w

x=2 у=b

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

// Java и J#

class A // Описание класса А

{

private int x; // Закрытая переменная x

char y; //Открытая переменная у

void Set (int m, char n) {x= m; y=n;} // Открытая функция