Массив объектов одного класса

  • docx
  • 18.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-002119.docx

Массив объектов одного класса

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

 

Следствие:

Объект, на который указывает элемент массива, должен быть соз- данным явным образом с использованием операции 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);


}

 

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