大挪耗

c++模板类与友元

#include "iostream"//包含头文件
using namespace std;//指定缺省的命名空间

//约束模板友元;模板类实例化时,每一实例的类对应一友元函数
template <typename T>
void show(T& a);  //在模板类的定义前面定义前面,声明友原函数模板


template<class T1,class T2>
class AA //模板类AA
{
public:
    friend  void show<>(AA<T1,T2>&a); //第二步,
    T1 m_x;
    T2 m_y;
public:
    AA(const T1 x,const T2 y):m_x(x),m_y(y){}
//    friend void show(const AA<int,string>& a);
//    friend void show(const AA<char,string> &a);

};

template <typename  T>
void show(T &a)
{
    cout<<"通用:x= "<< a.m_x<<",y= "<<a.m_y<< endl;
}

template <>
void show(AA<int,string>&a)
{
    cout <<"具体<int,string>: x= "<<a.m_x<<",y= "<<a.m_y<< endl;
}



void show(const AA<int,string>&a)
{
    cout<<"x = "<<a.m_x<<" ,y= "<<a.m_y<<endl;
}

void show(const AA<char,string>&a)
{
    cout<<"x= "<<a.m_x<<",y= "<<a.m_y<<endl;
}

int main()
{
    AA<int,string> a1(88,"来了来了。");
    show(a1);//将使用具体化的版本。

    AA<char,string> a2(88,"收拾收拾。");
    show(a2);//将使用通用的版本。

    AA<int,string> b1(88,"来了来了。");
    show(b1);//将使用具体化的版本。

    AA<char,string> b2(88,"收拾收拾。");
    show(b2);//将使用通用的版本。
}

输出:

具体: x= 88,y= 来了来了。
通用:x= X,y= 收拾收拾。
具体: x= 88,y= 来了来了。
通用:x= X,y= 收拾收拾。


已发布

分类

可以收藏大挪耗一下。下载麻烦点城通网盘,站长保证下载速度,不会限速的,放心点就是了;分卷,安卓下载为txt:程序下载为url,不会下载参考不会下载。如果你想让本站活的久一点,请直接捐助

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注