zoukankan      html  css  js  c++  java
  • C++学习笔记(一)模板类的友元模板函数Boolan

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include<iostream>
    #include<string>
    using namespace std;
     
    template<class T> class Test;
    template<class T> ostream& operator<<(ostream& out, const Test<T> &obj);
    template<class T> class Test
    {
    private:
        int num;
    public:
        Test(int n=0)
        {
            num = n;
        }
        Test(const Test <T> &copy)
        {
            num = copy.num;
        }
        //'<<'后面加上'<>'表明这个函数是个函数模板
        friend ostream& operator<< <>(ostream& out, const Test<T> &obj);
    };
     
    template <class T> ostream& operator<<(ostream& out, const Test<T> &obj)
    {
        cout << obj.num << endl;
        return out;
    }
      
    int main()
    {
        Test<int> t(2);
        cout << t << endl;
        getchar();
        return 0;
    }

    1)需要注意的是,template<class T>究竟哪里应该出现,哪里不应该出现。

    2)需要重点注意的是添加注释的行,

    1:  friend ostream& operator<< <>(ostream& out, const Test<T> &obj);

    此行不可也写成,

    1:  friend template<class T> ostream& operator<< <>(ostream& out, const Test<T> &obj);

    写成这样也不可,

    1:  friend template<class T> ostream& operator<<(ostream& out, const Test<T> &obj);

    总之,唯一正确的写法就是代码段中的写法。<>也必不可少,其实<>有两重意思,一是,表明此友元函数是函数模板;二是,此模板使用的模板类型参数为当前模板类的类型参数class T。

  • 相关阅读:
    OpenCV 图像旋转
    单链表插入与删除数据
    opencv 数据训练
    C++ 小波变换
    二十七、miniscrapy,scrapy源码初解
    二十六、Scrapy自定义命令
    二十五、scrapy中的去重规则及自定义
    二十四、在scrapy中如何获取cookies
    十六、 IO多路复用,异步非阻塞
    五、IO模型简介
  • 原文地址:https://www.cnblogs.com/mewmicro/p/6741458.html
Copyright © 2011-2022 走看看