#define MAX(A,B) ((A) > (B)) ? (A) : (B)
Przykładowe użycie MAX(a,b) zastąpione zostanie napisem: ((a) > (b)) ? (a) : (b). Można też używać jednoargumentowego operatora #, który spowoduje umieszczenie argumentu w cudzysłowie oraz dwuargumentowego operatora ##, który konkatenuje (skleja) dwa łańcuchy. Na przykład makro:
#define P(F,X) printf(#X" = "F"\n",X);wywołane:
P("%d",a) w połączeniu ze sklejaniem łańcuchów da instrukcję: printf("a = %d\n",a);
template < class T >
T max(T x, T y)
{
return (x > y) ? x : y;
};
W tym przykładzie parametrami funkcji max są nie tylko
zmienne a i b, ale również ich typ T.
Mówimy tu o wzorcu funkcji, jako że na podstawie tego wzorca
kompilator wygeneruje tyle funkcji ile tylko sobie zażyczymy
podstawiając za T różne typy.
Przeanalizuj przykład: wzorce.cpp
i odpowiedz na pytanie jakie zalety i wady
ma korzystanie z wzorców w stosunku do makr.
Napisz makro, (wzorzec funkcji) wyznaczającej minimum, (maksimum) z trzech, (czterech liczb).
Napisz makro, (wzorzec funkcji) wyznaczającej minimum, (maksimum) z tablicy o n elementach.
Podobnie jak poprzednie dla zadań z tablicami, które już pojawiły się na zajęciach: odbijanie tablic, liczenie statystyk, przesuwanie elementów, sklejanie itp.