home *** CD-ROM | disk | FTP | other *** search
- ////////////////////////////////////////////////////////////////////////////
- //
- // soubor: friend1.cpp
- // autor: Jaroslav Franek
- // copyright? proc ne: (c) 2001 Jaroslav Franek
- //
- // Spratelene tridy
- //
- ////////////////////////////////////////////////////////////////////////////
- //---------------------------------------------------------------------------
-
- #pragma hdrstop
- #include <iostream>
-
- //---------------------------------------------------------------------------
-
- template <class T> class Trida;
-
- class MojeTrida;
- template <class U> class MojeSablTrida;
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // class Trida<T>
- //
- ////////////////////////////////////////////////////////////////////////////
-
- template <class T> class Trida
- {
- // sp°ßtelenΘ t°φdy
- friend class MojeTrida; // (a)
- template <class U>
- friend class MojeSablTrida; // (b)
- friend class Trida<int>; // (c)
-
- // data nepristupna zvenku (private)
- static const int priv_data = 2603194;// "2603194, jste propusten..." :-)
-
- public:
- void neco()
- {
- std::cout << "\nja jsem Trida<" << typeid(T).name()
- << ">::neco a magicke cislo je "
- << Trida<char>::priv_data; // treba T==char
- }
- };
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // definice trid
- //
- ////////////////////////////////////////////////////////////////////////////
-
- class MojeTrida
- {
- public:
- void neco()
- {
- std::cout << "\nja jsem MojeTrida::neco a magicke cislo je "
- << Trida<int>::priv_data; // treba T==int
- }
- };
-
- template <class U> class MojeSablTrida
- {
- public:
- void neco()
- {
- std::cout << "\nja jsem MojeSablTrida<" << typeid(U).name()
- << ">::neco a magicke cislo je "
- << Trida<int>::priv_data; // treba T==int
- }
- };
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // v praxi :
- //
- ////////////////////////////////////////////////////////////////////////////
-
- #pragma argsused
- int main(int argc, char* argv[])
- {
- MojeTrida moje;
- MojeSablTrida<int> mojesabl_int;
-
- Trida<int> a_int;
- Trida<double> a_double;
-
- moje.neco();
- mojesabl_int.neco();
-
- a_double.neco(); // tohle by nemelo projit, ale projde, proc? (kvalifikace obejde pristupova prava)
- a_int.neco();
-
- return 0;
- }
- //---------------------------------------------------------------------------
-