Массив объектов одного класса
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Механизм формирования массива объектов и работы с ним в целом идентичен массиву значимых типов. Принципиальное отличие массива объектов от массива значимых типов заключается в том, что объект определенного класса представляет собой ссылку, и, следовательно, массив объектов хранит не собственно объекты, а ссылки.

 

Следствие:

Объект, на который указывает элемент массива, должен быть созданным явным образом с использованием операции new.

Массив значимых типов                         Массив объектов

int[] a;                                                  Тип[] b;

a=new int[2];                                        b=new Тип [2];

 

a[0]= 15;

a[1]= 25;

 

 


Объект создаем в явном виде: b[0]=new Тип();

b[1]= new Тип();

 

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

 

Пример:

Определить класс «Студент» с полями: фамилия, Номер зачетной книжки, оценки за последнюю сессию и методом вывода данных о студенте на экран.

class Студент

{

public string Фам;

public int Зач;

public int[] Оц;

 

public void Показать()

{

   int i;

   Console.Write(Фам + Зач);

   for (i = 0; i < Оц.Length; i++)

       Console.Write(Оц[i]);

   Console.WriteLine();

}

}

 

Создадим объект класса Студент:

 

Студент ст;

ст = new Студент();

 

Фам     Зач      Оц

 «»       0       0

 

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

 

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

 

Различают два вида конструкторов копирования:

1. Поверхностное копирование (с полей значений снимается копия значений, с полей ссылок – копия ссылок)

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

 

Конструктор с параметрами

 

public Студент (string Фам, int зач, int[] оц)

{     this.Фам = Фам; //this – ссылка на активный объект

this.Зач=Зач;

this.Оц=Оц;

}

Конструктор поверхностного копирования

 

public Студент (Студент ст)

{     Фам = ст.Фам;

Зач = ст.Зач;

Оц= ст.Оц;

}

Основная программа


Студент ст1; Студент ст2;

int[] Оц;

Оц=new int[]{10,10};

ст1=new Студент («Петров», 777, Оц);

ст2=new Студент (ст1);

 

 

При изменении массива оценок изменятся данные и в объекте ст1, и в объекте ст2.

 

Конструктор полного копирования

 

public Студент (string Фам, int зач, int[] оц)

{     this.Фам = Фам;

this.Зач=Зач;

this.Оц=new int[Оц.Length];

Array.Copy(Оц,0,this. Оц,0, Оц.Length);

}

 

public Студент (Студент ст)

{     Фам = ст.Фам;

Зач = ст.Зач;

Оц= new int[Оц.Length];

Array.Copy(Оц,0,this. Оц,0, Оц.Length);

}

 

 

У каждого объекта при копировании создается свой собственный массив оценок.

 



Дата: 2019-02-02, просмотров: 249.