Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пакет практичних робіт.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.04 Mб
Скачать

Приклад класичного спадкоємства

class First

{

private int a1, b1;

public First() //Конструктор за замовченням

{

a1=b1=0;

}

public First(int a,int b) // Користувальницький конструктор

{

a1=a;

b1=b;

}

.

.

.

public void F1 (bool state)

{

.

.

.

}

public void Input()

{

Console.WriteLine("Введіть необхідну інформацію для базового класса");

a1=Convert.ToInt32(Console.ReadLine());

b1=Convert.ToInt32(Console.ReadLine());

}

}

class Second:First

{

private float a2;

protected double b2;

public int c2;

public Second() //Конструктор похідного класу за замовченням

{

a2=0; b2=0;c2=0;

}

public Second(float a,double b,int c, int i, int j):base(i, j) //Користувальницький конструктор похідного класса

{

a2=a; b2=b; c2=c;

}

int GetSum() //Метод класу

{

return (int)(a2+b2+c2);

}

}

static void Main(string[] args)

{

First a1=new First();

Second a2=new Second(1.0f,2.0,3,4,6);

Second a3;

a3=a2;

//a3=a1; Помилка на етапі компіляції

First rf;

rf=a2; // Виконати привласнення можна через посилальну змінну базового класу

}

Приклад спадкоємства включення - делегування

class Third //Допоміжний клас

{

bool state;

public Third() //Конструктор за умовчанням

{

state=false;

}

public Third(bool s) // Користувальницький конструктор

{

state=s;

}

public void Turn (bool state)// Метод класу

{

state=s;

}

}

class Fourth

{

Third elem = new Third(); //Оголошення і створення внутрішнього класу

private string c1;

public First() //Конструктор за замовченням

{

c1=””;

}

public First(string c) //Користувальницький конструктор

{

c1=c;

}

.

.

.

public TurnMy (bool state) //Метод для виклику методу вбудованого класу

{

elem.Turn(state);

}

}

Контрольні питання

1.Що таке спадкоємство.

2.Види спадкоємства.

3.Конструктори похідних класів.

4.Яке ключове слово використовується для виклику конструктора базового класу.

5.Що означає ключове слово new при визначенні членів похідного класу.

6.Чи можна посилальній змінній базового класу привласнити значення посилальної змінної похідного класу.

7.Яке ключове слово використовується для заборони спадкоємства

8. Яке ключове слово використовується при оголошенні членів, які доступні похідним класам.

9. При спадкоємстві класу які специфікатори доступу можна указувати.

10.Приведіть приклади класів, для яких заборонено спадкоємство.

Практична робота 2. Використання системних інтерфейсів. Створення класів походних від стандартних інтерфейсів. Частина 1. Інтерфейс iCloneable.

Мета - Навчитися створювати типи, які підтримують поверхневе і глибоке копіювання об'єктів.

Завдання. Реалізувати інтерфейс ICloneable для можливості глибокого копіювання призначеного для користувача типу.

Теоретична частина

  • Поверхневе копіювання(shallow сору ) - це, коли реальне копіювання не відбувається, а замість цього створюється ще одне посилання на область оперативної пам'яті, займану даним об'єктом.

  • МеmberwiseClone() - метод класу System.Object, який використовується для «поверхневого копіювання».

  • Метод МеmberwiseClone() викликається автоматично, коли до об'єктів посилального типу застосовується оператор призначення (=), тобто одне посилання починає указувати на ту область оперативної пам'яті, що і інша.

  • Глибоке копіювання(deep сору) - це, коли створюється ще одна копія об'єкту.

  • Глибоке копіювання об'єктів посилального типу можливе, якщо в класі реалізований інтерфейс IСloneable.

  • Інтерфейс IСloneable складається з одного методу Clone().

public interface ICloneable

{

object Clone();

}

  • Реалізація цього методу для всіх класів полягає в створенні нового об'єкту і всім змінним об'єкту-копії треба привласнити значення відповідних змінних об'єкту-оригіналу.

  • Для структурних типів завжди використовується глибоке (побітове) копіювання.

  • Типом повернення значення методу Clone() є тип object, тому для подальшого використання методів типу, необхідне явне перетворення до типу клонованого об'єкту.