结构体 重载运算符模板 + 具体数据类型

来源:互联网 发布:mac暴风影音调节字幕 编辑:程序博客网 时间:2024/05/02 01:05
#include<iostream>using namespace std;struct point{    int x,y;    point(int x=0,int y=0):x(x),y(y){}};point operator + (const point& a,const point& b){//重载+   两个point结构体类型变量的相加    return point(a.x+b.x,a.y+b.y);}ostream& operator << (ostream &out,const point& p){  //重载使用 cout 输出的形式    out<<"("<<p.x<<","<<p.y<<")";    return out;}int main(){    point a,b(1,2);    a.x=3;    //通过1 2,可以确定,在输出流中,先进行的是,结构体中的相加操作,并得到一个结构体值,然后输出此值    //输出此值又通过重载输出流,改成了(x,y)的形式。    /*因此该模板的使用,可变换的有两部分:  首要条件为进行运算的为结构体, 1.结构体之间的各种运算的构造    //                                                                     2.输出形式的构造 */    //1    cout<<a+b<<endl;    //2    point c;    c=a+b;    cout<<c<<endl;    return 0;}

由于结构体里数据类型,存在某种类型不适应。 因此引用模板,将结构体里变量的数据类型具体化。
代码如下:(附带注释,其余不多说)

//此地模板 template <typename T>  需要在每一次使用<T>之前都要定义一次,具体原因现留着// 模板的优点:功能强大,有助于更好的理解STL ,应用范围广//模板的特性: 将变量的类型 具体了下来,解决了某种情况下的类型不适用。#include<iostream>#include<string>using namespace std;template <typename T> //模板定义为 T类型  T过的类型都为 T类型的struct point{    T x,y;    point(T x=0,T y=0):x(x),y(y){}   //其中 x y  都是T类型的};template <typename T>point<T> operator + (const point<T>& a,const point<T>& b){    return point<T>(a.x+b.x,a.y+b.y);}template <typename T>ostream& operator << (ostream &out,const point<T> p){    out<<"("<<p.x<<","<<p.y<<")";}int main(){    point<int> a(1,2),b(3,4);    point<double> c(1.1,2.2),d(3.3,4.4);    cout<<a+b<<" "<<c+d<<endl;    return 0;}