Объявление классов и их членов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Объявление классов и их членов



 

Формат объявления класса имеет следующий вид:

 

[модификатор] class [<имя_класса>] [: <список_родителей>] {

<тело_класса>

} [<объявления_переменных>];

 

где:

модификатор – модификатор доступа к классу;

class – зарезервированное ключевое слово;

<имя_класса> – допустимый идентификатор;

<список_родителей> – список родительских классов, от которых этот класс будет наследовать члены;

<тело_класса> – блок операторов, содержащий объявления членов класса.

<объявления_переменных> – обявления переменных (объектов, экземпляров этого класса) располагаются после закрывающейся фигурной скобки тела класса. Если в конце объявления класса указано объявление переменных, то допустимо не указывать имя класса. Эти объявления могут содержать инициализаторы открытых членов класса.

 

Таблица 14.1. Модификаторы доступа к классу и его членам

Модификатор Пояснение
public Открытый, глобальный. Класс или его члены доступны для внешнего использования (из любой точки программы).
private Закрытый, локальный. Класс или его члены доступны только внутри данного класса (используется по умолчанию).
protected Защищенный. Класс или его члены доступны только внутри данного класса, а также для потомков этого класса.
static Определяет статический член класса.

 

Объявить переменную можно, используя название класса в качестве типа данных.

 

<Имя_класса> <Название_переменной>;

 

Пример. Объявление класса Point с открытыми членами с одновременным и отдельным обявлением переменных point1 и point2:

 

c lass Point {

public:    // Указание на открытость членов класса

int x;

int y;

} point A; // Объявление переменной (объекта)

Point point B; // Объявление переменной (объекта)

int main() {

pointA.x = 10;  pointA.y = 20; // Инициализация

pointB.x = 15; pointB.y = 10; // переменных - членов

// Вывод значений переменных - членов

System::Console::WriteLine("A({0},{1})", pointA.x, pointA.y);

System::Console::WriteLine("B({0},{1})", pointB.x, pointB.y);

Console::ReadLine();

return 0; } /* Вывод: A (10,20) B (15,10) */

 

Пример 14.1. Использование объектов одного класса внутри другого.

 

#include "stdafx.h" using namespace System; class Point {           // Класс " Точка " public:  int x;          // Координаты int y;          // точки };

class Rect {        // Класс "Прямоугольник"

  public:

Point top _ left; // Координаты левого верхнего и

Point bottom _ right; // правого нижнего углов прямоугольника

};

int main () {

Rect rect;

rect. top _ left. x = 5;  //

rect. top _ left. y = 20; // Значения координат

rect. bottom _ right. x = 30; // углов прямоугольника

rect.bottom_right.y = 5; //

Console::WriteLine("Rectangle ABCD: B({0},{1}); D({2},{3})",

                  rect.top_left.x, rect.top_left.y,

                  rect.bottom_right.x, rect.bottom_right.y);

                  // Вывод: Rectangle ABCD: B(5,20); D(30,5)

Console::ReadLine();

return 0;

}

 

Ссылочные классы и классы значений.

Пример 14.2. Использование ссылочных классов и классов значений.

 

#include "stdafx.h"

ref class MyRefClass { // Определение ссылочного класса

public:

int i;

};

value class MyValClass { // Определение класса значения

public:

int k;

};

int main() {

MyRefClass^ m = gcnew MyRefClass;  // О бъявление экземпляра класса

m -> i = 21;

MyRefClass ^ n = m; // Копирование объекта по ссылке

System::Console::WriteLine("n = {0}", n->i); // Вывод: n = 21

int ti = m -> i;      // Копирование значения поля

System::Console::WriteLine("ti = {0}", ti); // Вывод: ti = 21

MyValClass^ x = gcnew MyValClass; // Объявление экземпляра класса

x -> k = 13;

MyValClass ^ y = x; // Копирование объекта по значению

System::Console::WriteLine("y = {0}", y->k); // Вывод: y = 13

MyValClass z;    // Объявление экземпляра класса

int tk = z. k;      // Копирование значения поля

System::Console::WriteLine("tk = {0}", tk); // Вывод: tk = 0

System::Console::ReadLine();

return 0;

}

 

 

Определение полей

Пример 14.3. Объявление полей класса и доступ к ним.

 

#include "stdafx.h"

class SampleClass {

double fieldA;  // Объявление закрытого поля

public:

int fieldB;  // Объявление открытого поля

};

int main() {

SampleClass sc; // Создание объекта (экземпляра класса)

sc.fieldB = 21;  // Присваиванивание значения открытому полю

System::Console::WriteLine("sc.fieldB = {0}", sc.fieldB);

                // Вывод: sc.fieldB = 21

System::Console::ReadLine();

return 0;

}

 

Битовые поля в классах.

Объявление битового поля имеет следующий формат:

 

<Тнп данных> [<Название поля>]: <Длнна в бнтах>;

 

Пример объявления класса с битовыми полями

 

class Status {

public:

unsigned  : 3;

unsigned a: 1;

unsigned b: 1;

unsigned с: 1;

} status1;

//...

status1.а = 1;

status1.b = 0;

status1.с = 1;

 

Определение свойств

Пример 14.4. Определение и использование свойства.

 

#include "stdafx.h"

using namespace System;

ref class SampleClass {  // Определение класса

private:

int field;           // Объявление закрытого поля

public:

property int p_field { // Определение свойства

int get() {

     return field;    // Возвращение значения поля

}

void set(int value) {

      if (value >= 0 && value <= 200)

         field = value; // Сохранение значения в поле

}

}

};

int main() {

SampleClass^ sc = gcnew SampleClass(); // Создание объекта

Console::WriteLine(sc->p_field); // Вывод: 0

sc->p_field = 21;            // Присваивание выполнено

Console::WriteLine(sc->p_field); // Вывод: 21

sc->p_field = 201;           // Присваивание не выполнено

Console::WriteLine(sc->p_field); // Вывод: 21

Console::ReadLine();

return 0;

}

 

Свойства, доступные только для чтения и только для записи.

Пример 14.5. Определение класса T со свойством Temperature, которое только возвращает значение закрытого поля temp из внутреннего состояния объекта. В программе создается объект (objT, экземпляр класса T) и выводится на экран значение его свойства Temperature.

 

#include "stdafx.h"

using namespace System;

ref class T {              // Определение класса

private:

int temp;              // Объявление закрытого поля

public:

property int Temperature { // Определение свойства для чтения

int get() {

     return temp;     // Возвращение значения поля

}

}

};

int main () {           // Точка входа в программу

T ^ objT = gcnew T (); // Создание экземпляра класса (объекта)

// Вывод значения температуры (свойства)

Console:: WriteLine (" T = {0}°", objT -> Temperature);

                       // Вывод: T = 0°

Console::ReadLine();

return 0;

}

 



Поделиться:


Последнее изменение этой страницы: 2019-05-20; просмотров: 124; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.21.104.109 (0.024 с.)