====== C# - Ćwiczenia ====== ===== Dziedziczenie ===== public class A { public int a; } public class B : A { public int b; } ===== Metody wirtualne ===== public class Pojazd { public virtual void Ruszaj() {...} } public class Rower : Pojazd { public override void Ruszaj() {...} } public class Auto : Pojazd { public override void Ruszaj() {...} } ===== Metody i klasy abstrakcyjne ===== public abstract class Pojazd { public abstract void Ruszaj(); } ===== Przeciążanie metod i operatorów ===== using System; public struct Complex { public int real; public int imaginary; public Complex(int real, int imaginary) { this.real = real; this.imaginary = imaginary; } public static Complex operator +(Complex c1, Complex c2) { return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary); } public override string ToString() { return(String.Format("{0} + {1}i", real, imaginary)); } } ====== Zadanie: Zbiór figur ====== Zaimplementuj klasy pozwalające reprezentować zbiór figur geometrycznych w dwu wymiarowej przestrzeni. W układzie współrzędnych umieszczane będą następujące obiekty: * Punkt – opisany współrzędnymi o wartościach rzeczywistych (x, y), posiada nazwę (string) * Koło – określone przez współrzędne środka (punkt na płaszczyźnie) oraz promień, posiada nazwę (string) * Trójkąt – określony przez współrzędne 3 punktów, posiada nazwę (string) Dodatkowo: * Wielobok - opisany jest listą punktów definiujących położenie wierzchołków (punkty przetrzymywane są w wybranej kolekcji). Wielobok posiada nazwę (string). \\ Zauważ, że trójkąt jest szczególnym przypadkiem wieloboku. Dla figur umieszczanych na wykresie zdefiniuj następujące operacje: * konstruktory pozwalające zainicjować pola składowe * konstruktory domyślne (konstruktory kopiujące - w C# metodę ''Clone()'' jeżeli potrzeba) * metodę zwracającą obwód figury. Zakładamy, że punkt posiada obwód równy 0 * przeciąż metodę ''ToString()'' zwracającą odpowiednie informacje o danej figurze w postaci zmiennej typu string * dociąż operator < porównujący dwie figury ze względu na wartość obwodu Dodatkowo: * dla wieloboku zaimplementuj metodę ''DodajPunkt'' dodającą nowy wierzchołek do wieloboku * dla obiektów realizujących figury zaimplementuj metodę ''Read()'' wczytującą zawartość pól obiektu z terminala Zaimplementuj klasę o nazwie ''Wykres'' realizującą dwuwymiarowy układ współrzędnych. Wykres przechowuje zbiór figur. Klasa ta stanowi więc pojemnik do którego możemy dodać dowolną liczbę punktów, kół oraz trójkątów. Do przechowywania figur użyj wybranej kolekcji z przestrzeni nazw [[http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx|System.Collections.Generic]].\\ Dla obiektu reprezentującego wykres: \\ * zaimplementuj konstruktor domyślny i kopiujący (dociąż metodę ''Clone()'') * zaimplementuj metodę pozwalającą dodawać figury do wykresu * zaimplementuj metodę dającą dostęp do elementu wykresu o podanym indeksie (najlepiej za pomocą tzw. [[http://msdn.microsoft.com/en-us/library/6x16t2tx.aspx|indexera]]) * dociąż metodę ''ToString()'' umieszczającą w łańcuchu znakowym informacje o wszystkich elementach umieszczonych na wykresie Dodatkowo: * W klasie reprezentującej wykres zaimplementuj metodę ''Sort()'', która posortuje kolekcję figur na wykresie w rosnącym porządku ze względu na wartość obwodu. \\ Kolejność ta powinna być widoczna po wywołaniu metody ''ToString()''. Sortowanie kolekcji wymaga utworzenie delegata realizującego porównanie [[http://msdn.microsoft.com/en-us/library/tfakywbh.aspx|Comparison]] lub obiektu implementującego interfejs [[http://msdn.microsoft.com/en-us/library/8ehhxeaf.aspx|IComparer]].