Ćwiczenie 2: Szablony klas

Po co

  • Ogólne doskonalenie posługiwania się C++.
  • Poznanie sposobu interpretacji szablonu klas.
  • Zapoznanie się z mechanizmem działania szablonów klas.
  • Definiowanie szablonów klas:
    • Definiowanie metod specjalizowanych.
    • Umiejętność zastosowania szablonów klas dla typów wbudowanych, jak również typów definiowanych przez użytkownika.

Oddawanie ćwiczenia

  • Przed oddaniem ćwiczenia, program należy przetestować używając następującego pliku ex2main.cpp zawartego w paczce: ex2.zip
  • Powyższy plik wymaga istnienia pliku aghInclude.h poprzez który włączane są wszystkie niezbędne pliki.

Przebieg ćwiczenia

  1. Definiujemy szablon klasy aghMatrix która będzie reprezentowała macierz danych.
  2. Klasa powinna umożliwiać tworzenie macierzy o różnych wymiarach (także prostokątnych).
  3. Indeksowanie wierszy i kolumn rozpoczyna się od zera.
  4. Typem przechowywanym w macierzy jest typ parametryczny.
  5. W klasie należy:
    1. Zdefiniować metodę setItem ustawiającą wartość elementu macierzy która przyjmie trzy argumenty: pierwszy numer wiersza, drugi numer kolumny, trzeci wartość elementu na przecięciu podanego wiersza i kolumny.
    2. Zdefiniować dwie metody o nazwie setItems które jako argument/argumenty przyjmą wartości wszystkich współczynników macierzy niezależnie od jej wymiarów:
      • Pierwsza przyjmuje tylko jeden argument, którym jest wskaźnik do początku jednowymiarowej tablicy z której pobierane są wszystkie współczynniki macierzy.
      • Druga metoda jako pierwszy argument przyjmuje ilość wierszy (r) macierzy, następnie jako drugi argument ilość kolumn (c) macierzy, oraz jako pozostałe, r*c argumentów będących współczynnikami macierzy.
    3. Przeładować operatory:
      • Przypisania =
      • Dodawania +
      • Mnożenia *
      • Porównaia ==, !=
      • () - służący do odnoszenia się do poszczególnych elementów macierzy. Operator ten definiujemy jako dwuargumentowy przyjmujący dwie liczy całkowite będące odpowiednio indeksem wiersza i kolumny.
    4. Zdefiniować dla klasy aghMatrix operatory specjalizowane +,* dla typu char które kolejne małe litery alfabetu będą traktowały jako kolejne liczby naturale: a=0, b=1, c=2, d=3,… np.:
      • a+b=b co odpowiada to działaniu: 0+1=1
      • d*c=g co odpowiada to działaniu: 3*2=6
      • Działania powinny dawać poprawne wyniki w zakresie małych liter:
      • Chcąc utrzymać wynik zawsze w zakresie, po przekroczeniu zakresu można wykonywać działanie modulo:
        • Podczas dodawania macierzy pierwszym argumentem działania modulo jest suma odpowiednich elementów macierzy wejściowych.
        • Podczas mnożenia macierzy pierwszym argumentem działania modulo jest suma wszystkich iloczynów elementów macierzy wejściowych.
    5. Zdefiniować dla klasy aghMatrix operator specjalizowany + dla typu std::string:
      • Operator ten wykonuje dodawanie macierzy wg. powszechnie znanego algorytmu.
      • Argumentami tego operatora są wyrazy (napisy), które traktujemy jako zbiory liter.
      • Wynikiem dodawania dwóch wyrazów jest zbiór liter które należą do co najmniej jednego ze składników.
    6. Zdefiniować dla klasy aghMatrix operator specjalizowany * dla typu std::string:
      • Operator ten wykonuje mnożenie macierzy wg. powszechnie znanego algorytmu.
        • Obliczenie pojedynczego elementu macierzy wyjściowej wymaga obliczenia sumy iloczynów wyrazów z odpowiedniego wiersza i odpowiedniej kolumny macierzy wejściowych.
      • Argumentami iloczynu są wyrazy (napisy), które traktujemy jako zbiory liter.
      • Wynikiem mnożenia dwóch wyrazów jest zbiór liter należących do obu wyrazów.
      • Sumowanie przebiega tak jak opisano powyżej.
  6. Definiujemy klase aghComplex która reprezentuje liczby zespolone.
    1. Przyjmujemy że wartości zarówno części rzeczywistej jak też urojonej są zmiennoprzecinkowe.
    2. Klasa powinna być tak zdefiniowana aby mogła zostać użyta jako parametr szablonu klasy aghMatrix!
    3. Wewnątrz szablonu klasy aghMatrix nie definiujemy żadnych metod/operatorów specjalizowanych dla klasy aghComplex.
  7. Zaistniałe nieprawidłowe sytuacje powinny zostać obsłużone poprzez wyrzucenie wyjątku przy pomocy klasy aghException.
  8. Program powinien się poprawnie kompilować i uruchomić wraz z dostarczonym plikiem ex2main.cpp
pl/dydaktyka/jimp2/2016/part2/ex/ex2.txt · ostatnio zmienione: 2017/07/17 08:08 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0