当前位置:   article > 正文

c++ 实现Set模板类,并重载+、-<<和>>操作符;_c++类模板输入运算符重载

c++类模板输入运算符重载

试题:

实现集合set模板类,实现添加,删除,查找,并实现重载交*,并+,差-集运算符的重载

设计原理:

  1. 模板为逻辑功能相同而类型不同的程序提供代码共享;

  1. 函数模板一次性定义出具有共性的一组函数,同时也可以处理多种不同类型数据的函数;使用时先说明函数模板,后实例化构造出相应的模板函数进行调用执行;

  1. 当类模板实例化为模板类时,类模板中成员函数同时实例化为模板函数

可能遇到问题:

  • 在Set模板类中对输入输出运算符的定义遇到问题,编译运行不成功,可以尝试把它们的定义放在类模板的定义体中;

  • 在类模板外定义函数总会忘记写template<模板参数表>,或者直接实例化函数模板,记牢概念性的东西,灵活运用模板;

代码如下:

  1. #include<iostream>
  2. #define max 100
  3. using namespace std;
  4. template<class T>
  5. class Set
  6. {
  7. public:
  8. Set(){t=0;}
  9. Set(T);
  10. void add(T);
  11. void del(T);
  12. int find(T);
  13. void print();
  14. Set operator*(Set&);//交 Set jiao(Set&);
  15. Set operator+(Set&);//并 Set bing(Set&);
  16. Set operator-(Set&);//差 Set cha(Set&);
  17. friend istream& operator>>(istream&in,Set&t)
  18. {
  19. T m;
  20. cin>>m;
  21. t.add(m);
  22. return in;
  23. }
  24. friend ostream& operator<<(ostream& out,Set& t)
  25. {
  26. t.print();
  27. return out;
  28. }
  29. private:
  30. T a[max];
  31. int t;
  32. };
  33. template<class T>
  34. Set<T>::Set(T n){ //构造函数
  35. t=0;
  36. a[t++]=n;
  37. }
  38. template<class T>
  39. void Set<T>::add(T sum){ //添加
  40. if(find(sum)==-1)
  41. a[t++]=sum;
  42. }
  43. template<class T>
  44. int Set<T>::find(T sum){ //查找
  45. for(int i=0;i<t;i++){
  46. if(sum==a[i])
  47. return i;
  48. }
  49. return -1;
  50. }
  51. template<class T> //打印函数
  52. void Set<T>::print(){
  53. for(int i=0;i<t;i++)
  54. cout<<a[i]<<" ";
  55. cout<<endl;
  56. }
  57. template<class T>
  58. Set<T> Set<T>::operator+(Set& b){ //并集+
  59. Set temp;
  60. int i,j;
  61. for(i=0;i<t;i++)
  62. temp.add(a[i]);
  63. for(i=t,j=0;i<t+b.t;i++)
  64. temp.add(b.a[j++]);
  65. return temp;
  66. }
  67. template<class T>
  68. Set<T> Set<T>::operator*(Set& b){ //交集*
  69. Set temp;
  70. int i;
  71. for(i=0;i<t;i++){
  72. int n=find(b.a[i]);
  73. if(n!=-1)
  74. temp.add(b.a[i]);
  75. }
  76. return temp;
  77. }
  78. template<class T>
  79. Set<T> Set<T>::operator-(Set& b){ //差集-
  80. Set temp1,temp2;
  81. int i,n;
  82. temp1=(*this)*b;
  83. for(i=0;i<t;i++){
  84. n=temp1.find(a[i]);
  85. if(n==-1)
  86. temp2.add(a[i]);
  87. }
  88. return temp2;
  89. }
  90. int main()
  91. {
  92. // Set<int> a,b,c; //int类型,a,b,c为该类的对象
  93. Set<char> a,b,c; //char型,a,b,c为该类的对象
  94. cout<<"输入a集合元素:"<<endl;
  95. cin>>a>>a>>a;
  96. cout<<"输入b集合元素:"<<endl;
  97. cin>>b>>b;
  98. cout<<"a:"<<a<<"b:"<<b;
  99. c=a-b;
  100. cout<<"a-b:"<<c;
  101. c=a+b;
  102. cout<<"a+b:"<<c;
  103. return 0;
  104. }

运行结果:

  • 类的对象char型时:

  • 类的对象为int 型时:

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号