home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 October / Chip_2001-10_cd1.bin / chplus / cpp / friend1.cpp next >
C/C++ Source or Header  |  2001-08-02  |  3KB  |  99 lines

  1. ////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  soubor: friend1.cpp
  4. //  autor: Jaroslav Franek
  5. //  copyright? proc ne: (c) 2001 Jaroslav Franek
  6. //
  7. //  Spratelene tridy
  8. //
  9. ////////////////////////////////////////////////////////////////////////////
  10. //---------------------------------------------------------------------------
  11.  
  12. #pragma hdrstop
  13. #include <iostream>
  14.  
  15. //---------------------------------------------------------------------------
  16.  
  17. template <class T> class Trida;
  18.  
  19. class MojeTrida;
  20. template <class U> class MojeSablTrida;
  21.  
  22. ////////////////////////////////////////////////////////////////////////////
  23. //
  24. //  class Trida<T>
  25. //
  26. ////////////////////////////////////////////////////////////////////////////
  27.  
  28. template <class T> class Trida
  29. {
  30.    // sp°ßtelenΘ t°φdy
  31.    friend class MojeTrida;   // (a)
  32.    template <class U>
  33.       friend class MojeSablTrida;  // (b)
  34.    friend class Trida<int>;  // (c)
  35.  
  36.    // data nepristupna zvenku (private)
  37.    static const int priv_data = 2603194;// "2603194, jste propusten..." :-)
  38.  
  39. public:
  40.    void neco()
  41.    {
  42.       std::cout << "\nja jsem Trida<" << typeid(T).name()
  43.                 << ">::neco a magicke cislo je "
  44.                 << Trida<char>::priv_data;  // treba T==char
  45.    }
  46. };
  47.  
  48. ////////////////////////////////////////////////////////////////////////////
  49. //
  50. //  definice trid
  51. //
  52. ////////////////////////////////////////////////////////////////////////////
  53.  
  54. class MojeTrida
  55. {
  56. public:
  57.    void neco()
  58.    {
  59.       std::cout << "\nja jsem MojeTrida::neco a magicke cislo je "
  60.                 << Trida<int>::priv_data;  // treba T==int
  61.    }
  62. };
  63.  
  64. template <class U> class MojeSablTrida
  65. {
  66. public:
  67.    void neco()
  68.    {
  69.       std::cout << "\nja jsem MojeSablTrida<" << typeid(U).name()
  70.                 << ">::neco a magicke cislo je "
  71.                 << Trida<int>::priv_data;  // treba T==int
  72.    }
  73. };
  74.  
  75. ////////////////////////////////////////////////////////////////////////////
  76. //
  77. //  v praxi :
  78. //
  79. ////////////////////////////////////////////////////////////////////////////
  80.  
  81. #pragma argsused
  82. int main(int argc, char* argv[])
  83. {
  84.    MojeTrida moje;
  85.    MojeSablTrida<int> mojesabl_int;
  86.  
  87.    Trida<int> a_int;
  88.    Trida<double> a_double;
  89.  
  90.    moje.neco();
  91.    mojesabl_int.neco();
  92.  
  93.    a_double.neco();  // tohle by nemelo projit, ale projde, proc? (kvalifikace obejde pristupova prava)
  94.    a_int.neco();
  95.  
  96.    return 0;
  97. }
  98. //---------------------------------------------------------------------------
  99.