home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2001 October
/
Chip_2001-10_cd1.bin
/
chplus
/
cpp
/
friend4.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2001-08-02
|
3KB
|
93 lines
////////////////////////////////////////////////////////////////////////////
//
// soubor: friend4.cpp
// autor: Jaroslav Franek
// copyright? proc ne: (c) 2001 Jaroslav Franek
//
// Spratelene funkce, dil 3
//
////////////////////////////////////////////////////////////////////////////
//---------------------------------------------------------------------------
#pragma hdrstop
#include <iostream>
//---------------------------------------------------------------------------
template <class T> class Trida;
template <class T> void f(Trida<T> &); // (1)
void f(Trida<int> &); // (2)
template <class T> void g(Trida<T> &); // (3)
////////////////////////////////////////////////////////////////////////////
//
// class Trida<T>
//
////////////////////////////////////////////////////////////////////////////
template <class T> class Trida
{
// sp°ßtelene funkce f
friend void f(Trida<T> &); // (g)
// sp°ßtelene funkce g
friend void g(Trida<T> &); // (k)
// data nepristupna zvenku (private)
static const int priv_data = 2603194; // "2603194, jste propusten..." :-)
};
////////////////////////////////////////////////////////////////////////////
//
// definice funkci
//
////////////////////////////////////////////////////////////////////////////
// ted to neni pritel
template <class T> void f(Trida<T> & x) // (1)
{
std::cout << "\nja jsem sablonova f<" << typeid(T).name() << ">"
" a magicke cislo neznam";
}
// tohle je pritel
void f(Trida<int> & x) // (2)
{
std::cout << "\nja jsem nesablonova f"
" a magicke cislo je " << x.priv_data;
}
// a tohle neni pritel
template <class T> void g(Trida<T> & x) // (3)
{
std::cout << "\nja jsem sablonova g<" << typeid(T).name() << ">"
" a magicke cislo neznam";
}
////////////////////////////////////////////////////////////////////////////
//
// v praxi :
//
////////////////////////////////////////////////////////////////////////////
#pragma argsused
int main(int argc, char* argv[])
{
Trida<int> a_int;
Trida<double> a_double;
f<int>(a_int); // musime rict, ze chceme volat specializaci
// tohle projde, ale f<int> neni pritel
f(a_int); // radova funkce, je pritel, OK
// f(a_double); // tohle neprojde, neni k dispozici radova funkce
// g(a_int); // tohle neprojde, protoze to neni radova funkce
// g(a_double); // to same
return 0;
}
//---------------------------------------------------------------------------