#include<iostream>
using namespace std
;
template <class T>
class Tmpl;
template <class T>
void Func1(Tmpl
<T
> &x
)
{
cout
<< "this is a global function :Func1()" << endl
<<"\t";
x
.print();
}
template <class T>
class B
{
public:
void Func(Tmpl
<T
>& x
);
};
template <class T>
class Tmpl
{
T a
;
public:
friend void Func1();
friend class A;
template<class T>
friend void B
<T
>::Func(Tmpl
<T
>&);
Tmpl(T a_
=0):a(a_
)
{
cout
<< "the Tmpl<T>::constructor was called!" << endl
;
}
void print()
{
cout
<< "a=" << a
<< endl
;
}
};
class A
{
Tmpl
<double> obj_in_A
;
public:
void printA()
{
cout
<< "this is a function of class A" << endl
;
}
A(double a_
):obj_in_A(a_
)
{
cout
<< "从友元类A(普通类A)中访问Tmpl<T>的私有成员a:" <<endl
;
cout
<< "a=" << obj_in_A
.a
<< endl
;
}
};
template<class T>
void B
<T
>:: Func(Tmpl
<T
>& x
)
{
cout
<< "this is a function of class B:" << endl
;
cout
<< "从友元函数(类模板B<T>的函数Func(Tmpl<T>& x))中访问Tmpl<T>的私有成员a:" << endl
;
cout
<< "x.a=" << x
.a
<< endl
;
}
int main()
{
Tmpl
<int> i(7);
i
.print();
Func1(i
);
Tmpl
<double> f(7.889);
f
.print();
A
obj1(3.14);
B
<double> obj2
;
obj2
.Func(f
);
}
转载请注明原文地址:https://blackberry.8miu.com/read-39030.html