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