class TDataUrodzenia
{
    public:
        TBool operator>( const TDataUrodzenia& aInnaData ) const;
        TBool operator<( const TDataUrodzenia& aInnaData ) const;
    
    // Pola
};

inline TBool TDataUrodzenia::operator>( const TDataUrodzenia& aInnaData ) const
{
    TBool wynik = EFalse;
    
    if( iRok > aInnaData.iRok )
    {
        wynik = ETrue;
    }
    else if( iRok == aInnaData.iRok )
    {
        if( iMiesiac > aInnaData.iMiesiac )
        {
            wynik = ETrue;
        }
        else if( iMiesiac == aInnaData.iMiesiac )
        {
            if( iDzien > aInnaData.iDzien )
            {
                wynik = ETrue;
            }            
        }        
    }
    
    return wynik;
}

inline TBool TDataUrodzenia::operator<( const TDataUrodzenia& aInnaData ) const
{
    TBool wynik = EFalse;
    
    if( iRok < aInnaData.iRok )
    {
        wynik = ETrue;
    }
    else if( iRok == aInnaData.iRok )
    {
        if( iMiesiac < aInnaData.iMiesiac )
        {
            wynik = ETrue;
        }
        else if( iMiesiac == aInnaData.iMiesiac )
        {
            if( iDzien < aInnaData.iDzien )
            {
                wynik = ETrue;
            }            
        }        
    }
    
    return wynik;
}

const TInt KMaxDlugoscImienia = 16;    // Wielokrotno 4 bajtw
const TInt KMaxDlugoscNazwiska = 32;    // Wielokrotno 4 bajtw

class TOsoba
{
    public:
        static TInt PorzadkujWgDaty( const TOsoba& aOsoba1, const TOsoba& aOsoba2 );
        static TBool Porownaj( const TOsoba& aOsoba1, const TOsoba& aOsoba2 );
    
    // Pola
};

TInt TOsoba::PorzadkujWgDaty( const TOsoba& aOsoba1, const TOsoba& aOsoba2 )
{
    TInt wynik = 0;
    if( aOsoba1.iDataUrodzenia > aOsoba2.iDataUrodzenia )
    {
        // aOsoba1 modsza od aOsoba2
        wynik = 1;
    }
    else if( aOsoba1.iDataUrodzenia < aOsoba2.iDataUrodzenia )
    {
        // aOsoba1 starsza od aOsoba2
        wynik = -1;
    }
    
    return wynik;
}

TBool TOsoba::Porownaj( const TOsoba& aOsoba1, const TOsoba& aOsoba2 )
{
    TBool wynik = EFalse;
    
    // Zakadamy, e jeeli imi i nazwisko si zgadzaj, to
    // znalelimy waciw osob.
    if( !aOsoba1.iImie.Compare( aOsoba2.iImie ) &&
        !aOsoba1.iNazwisko.Compare( aOsoba2.iNazwisko ) )
    {
        wynik = ETrue;
    }
    
    return wynik;
}

// Dalsze operacje...
// Sortowanie tablicy wedug pola TOsoba::iDataUrodzenia
osoby.Sort( TOsoba::PorzadkujWgDaty );

// Wyszukujemy Grzegorza Nowaka.
TInt indeks = osoby.Find( grzegorzNowak, TOsoba::Porownaj );
//indeks = 2
