美文网首页
模板类的几点注意

模板类的几点注意

作者: lusoer | 来源:发表于2017-04-26 21:01 被阅读57次

最近刚学了C++的模板类设计,刚开始上手的时候,总是会有一大堆的bug 摆在那里,确实模板作为多态实现的一种方式,很多时候需要我们去设想和顾虑很多方面的事情,一不留神就会造成出错。而且模板类在编译的时候并不会有什么问题,模板类只有在具体的模板类具体化之后才会显现出来。至少对于我来说还是挺头痛的。
  那今天我就记录一下自己在模板类设计的时候容易犯的错误。

模板类的运算符重载

再用友元函数重载>>和<<这些运算符的时候千万不要把函数定义写在类定义外面!!
再用友元函数重载>>和<<这些运算符的时候千万不要把函数定义写在类定义外面!!
再用友元函数重载>>和<<这些运算符的时候千万不要把函数定义写在类定义外面!!
重要的事情说三遍。
代码如下:

#include "stdafx.h"
#include   <iostream>
using   namespace   std;  
   
template<class T>  
class Test  
{  
   public:  
      Test(const T& t):data(t){}
      //---------------------------------------------
      friend ostream& operator<<(ostream& out,Test<T>& t)    //输出流重载声明及实现
      {
           return out<<"data   is   "<<t.data;
      } //--------------------------------------------
      friend istream& operator>>(istream& in,Test<T>& t)      //输入流重载声明及实现
      {
          return in>>t.data;
      }//---------------------------------------------
   private:  
      T data;  
};//-----------------------------------------------------------------      
      
int   main()  
{  
   Test<int> b(3);  
   cout<<b<<'\n';  
   cin>>b;
   cout<<b<<'\n';
   return 0;
}

那么输入输出流重载为什么不能在类内声明,类外实现呢??因为模板比较特殊,若果在模板类外实现重载的话:

template<class T>
ostream& operator<<(ostream& out,Test<T>& t)
{
        return out<<"data   is   "<<t.data;
} //--------------------------------------------

上面正好是函数模板的定义,而我们知道操作符重载函数不是类的成员函数,因此此处相当于定义了一个新的函数模板(不同于类中的friend ostream& operator<<(ostream& out,Test<T>& t) )。但若去掉template<class T> ,函数中的参数Test<T>就不知是什么类型,所以不能在模板类内声明,类外实现操作符重载。

相关文章

  • 模板类的几点注意

    最近刚学了C++的模板类设计,刚开始上手的时候,总是会有一大堆的bug 摆在那里,确实模板作为多态实现的一种方式,...

  • 模板类重载运算符注意事项

    注意事项 要先把模板类声明; 声明要重载的运算符; 具体定义模板类,并在类内部定义重载运算符为friend。 注意...

  • 模板特化

    模板是C++泛型编程编程的基础,STL从头到尾都是模板泛型编程 函数模板 类模板 几个需要注意的点1. 类模板的和...

  • 模板写作法

    一、通知类模板 五元素:主体,内容,对象,注意事项,执行办法 要求:信息传达的准确和用词简、全面 二、分析类模板(...

  • ★07.关于类模板

    简述 类模板:是类类型的模板,如:vector。 模板类:类模板的实例化,如:vector 。 类模板的模板参数无...

  • 14/15

    约束模板友元 模板类的外边定义一个模板函数,在模板类中将模板函数具体化为模板类的友元函数 非约束模板友元 模板类中...

  • 14/12

    成员模板:模板类中成员变量是模板类对象(1),模板类中函数是模板函数(2)

  • 读书笔记:《学会写作》-模板写作、新媒体写作

    继续《学会写作》的阅读。 “模板写作”第一节作者给出了四类实用的模板:通知类模板、分析类模板、计划类模板和总结类模...

  • java(1-基本语法)

    基本语法 编写 Java 程序时,应注意以下几点:类名:类名的首字母应该大写。例如 MyFirstJavaClas...

  • 模板与泛型 —— using 定义模板别名

    一、类的成员函数模板 二、using 定义模板别名 一、类的成员函数模板 普通类和模板类,其成员函数都可以是模板函...

网友评论

      本文标题:模板类的几点注意

      本文链接:https://www.haomeiwen.com/subject/xtywzttx.html