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。

  • 相关阅读:
    MySQL优化器 limit影响的case
    Innodb物理存储结构系列1
    Innodb 锁系列1 同步机制
    javascript变量作用域 全局及局部
    测试20160422
    python-推荐
    python问题:IndentationError:expected an indented block错误解决
    协同过滤(推荐方法)——数据挖掘
    教你在Excel里做GA的水平百分比图的详细步骤(图文教程)-成为excel大师(1)
    win7搭建ios开发环境
  • 原文地址:https://www.cnblogs.com/mewmicro/p/6741458.html
Copyright © 2011-2022 走看看