模板类的非模板友元函数

  
  
/*********************************/
/* 1.模板类的非模板友元函数
*
/*********************************/
#include <iostream>
using std::cout;
using std::endl;
template <typename T>
class HasFriend{
private:
T item;
static int ct;
public :
HasFriend(const T&i):item(i){ct++;}
~HasFriend(){ct--;}
friend void counts();
friend void reports(HasFriend<T> &);//不是模板函数,只是使用了一个模板做参数,
// 意味必需要使用友元定义显示具体化
// void report(HasFriend<short> &){...};
// void report(HasFriend<double> &){...};
};
template <typename T>
int HasFriend<T>::ct = 0;
void counts()
{
cout<<"int count:"<<HasFriend<int>::ct<<";"<<endl;
cout<<"double count:"<<HasFriend<double>::ct<<";"<<endl;
}
void reports(HasFriend<int> &hf)
{
cout<<"HasFriend<int>: "<<hf.item<<endl;
}
void reports(HasFriend<double> &hf)
{
cout<<"HasFriend<double>: "<<hf.item<<endl;
}
int main()
{
cout<<"No objects declared:"<<endl;
counts();
HasFriend<int> hfi1(10);
cout<<"After hfi1 declared:"<<endl;
counts();
HasFriend<int> hfi2(20);
cout<<"After hfi2 declared:"<<endl;
counts();
HasFriend<double> hfib(10.8);
cout<<"After hfib declared:"<<endl;
counts();
reports(hfi1);
reports(hfi2);
reports(hfib);
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值