赞
踩
试题:
实现集合set模板类,实现添加,删除,查找,并实现重载交*,并+,差-集运算符的重载
设计原理:
模板为逻辑功能相同而类型不同的程序提供代码共享;
函数模板一次性定义出具有共性的一组函数,同时也可以处理多种不同类型数据的函数;使用时先说明函数模板,后实例化构造出相应的模板函数进行调用执行;
当类模板实例化为模板类时,类模板中成员函数同时实例化为模板函数;
可能遇到问题:
在Set模板类中对输入输出运算符的定义遇到问题,编译运行不成功,可以尝试把它们的定义放在类模板的定义体中;
在类模板外定义函数总会忘记写template<模板参数表>,或者直接实例化函数模板,记牢概念性的东西,灵活运用模板;
代码如下:
- #include<iostream>
- #define max 100
- using namespace std;
- template<class T>
- class Set
- {
- public:
- Set(){t=0;}
- Set(T);
- void add(T);
- void del(T);
- int find(T);
- void print();
- Set operator*(Set&);//交 Set jiao(Set&);
- Set operator+(Set&);//并 Set bing(Set&);
- Set operator-(Set&);//差 Set cha(Set&);
- friend istream& operator>>(istream&in,Set&t)
- {
- T m;
- cin>>m;
- t.add(m);
- return in;
- }
- friend ostream& operator<<(ostream& out,Set& t)
- {
- t.print();
- return out;
- }
- private:
- T a[max];
- int t;
- };
- template<class T>
- Set<T>::Set(T n){ //构造函数
- t=0;
- a[t++]=n;
- }
- template<class T>
- void Set<T>::add(T sum){ //添加
- if(find(sum)==-1)
- a[t++]=sum;
- }
- template<class T>
- int Set<T>::find(T sum){ //查找
- for(int i=0;i<t;i++){
- if(sum==a[i])
- return i;
- }
- return -1;
- }
- template<class T> //打印函数
- void Set<T>::print(){
- for(int i=0;i<t;i++)
- cout<<a[i]<<" ";
- cout<<endl;
- }
- template<class T>
- Set<T> Set<T>::operator+(Set& b){ //并集+
- Set temp;
- int i,j;
- for(i=0;i<t;i++)
- temp.add(a[i]);
- for(i=t,j=0;i<t+b.t;i++)
- temp.add(b.a[j++]);
- return temp;
- }
- template<class T>
- Set<T> Set<T>::operator*(Set& b){ //交集*
- Set temp;
- int i;
- for(i=0;i<t;i++){
- int n=find(b.a[i]);
- if(n!=-1)
- temp.add(b.a[i]);
- }
- return temp;
- }
- template<class T>
- Set<T> Set<T>::operator-(Set& b){ //差集-
- Set temp1,temp2;
- int i,n;
- temp1=(*this)*b;
- for(i=0;i<t;i++){
- n=temp1.find(a[i]);
- if(n==-1)
- temp2.add(a[i]);
- }
- return temp2;
- }
- int main()
- {
- // Set<int> a,b,c; //int类型,a,b,c为该类的对象
- Set<char> a,b,c; //char型,a,b,c为该类的对象
- cout<<"输入a集合元素:"<<endl;
- cin>>a>>a>>a;
- cout<<"输入b集合元素:"<<endl;
- cin>>b>>b;
- cout<<"a:"<<a<<"b:"<<b;
- c=a-b;
- cout<<"a-b:"<<c;
- c=a+b;
- cout<<"a+b:"<<c;
- return 0;
- }
-
运行结果:
类的对象char型时:
类的对象为int 型时:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。