| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 763 人关注过本帖
标题:请教模板的问题
只看楼主 加入收藏
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
收藏
 问题点数:0 回复次数:13 
请教模板的问题
#include<iostream>
using namespace std;
/*template<class t1,class t2>
class Pair
{
public:
Pair(int,int);
void print(int,int);
private:
t1 first;
t2 second;
};
template<class t1,class t2>
Pair<t1,t2>::Pair(int s,int j)
{
first=s;
second=j;
print(first,second);
}
template<class t1,class t2>
void Pair<t1,t2>::print(int num1,int num2)
{
cout<<"after swap number:";
int num;
num=num1;num1=num2;num2=num;
cout<<num1<<" "<<num2<<endl;
}
void main()
{
int i,j;
cout<<"Input tow number:";
cin>>i>>j;
Pair<int,int> p(i,j);
}*/
const int N=10;
static int j=0;
bool b=false;
template<class T>
class Set
{
public:
//friend istream& operator >>(istream&, const Set&);
//friend ostream& operator <<(ostream&, const Set&);
Set();
T operator*(const Set<T>&) const;
T operator+(Set<T>&);
T& operator=(const Set<T>&);
int array[2*N];
};
template<class T>
istream& operator >>(istream& in,Set<T>& s)
{
for(int i=0;i<N;i++)
in>>s.array[i];
return in;
}
template<class T>
ostream& operator <<(ostream& out,Set<T>& s)
{
if(j==0)
{
for(int i=0;i<N;i++)
{
out<<s.array[i]<<" ";
}
}
else
{
for(int k=0;k<j;k++)
out<<s.array[k]<<" ";
j=0;
}
return out;
}
template<class T>
T& Set<T>::operator =(const Set<T>& s)
{
if(j!=0)
for(int k=0;k<j;k++)
array[k]=s.array[k];
for(int i=0;i<N;i++)
array[i]=s.array[i];
return *this;
}
template<class T>
T Set<T>::operator *(const Set<T>& s) const
{
Set<T> set;
int num=0;
if(b==false)
for(int i=0;i<N;i++)
{
for(int k=0;k<N;k++)
if(array[i]==s.array[k]){set.array[num++]=array[i];break;}
}
else
for(int i=0;i<N+1;i++)
{
for(int k=0;k<N+1;k++)
if(array[i]==s.array[k]){set.array[num++]=array[i];break;}
}
for(int l=0;l<num;l++)
{
for(int r=l+1;r<num;)
{
if(set.array[l]==set.array[r])
{
int t=r;
while(t<num){
set.array[t]=set.array[t+1];t++;
}
num--;
}
else {set.array[j]=set.array[l];r++;}
}
j++;
}
return set;
}
template<class T>
T Set<T>::operator +(Set<T>& s)
{
Set<T> list;
int i,k;
int num=0;
for(i=0;i<N;i++)
list.array[num++]=array[i];
for(k=0;k<N;k++)
list.array[num++]=s.array[k];
for(int l=0;l<num;l++)
{
for(int r=l+1;r<num;)
{
if(list.array[l]==list.array[r])
{
int t=r;
while(t<num){
list.array[t]=list.array[t+1];t++;
}
num--;
}
else {list.array[j]=list.array[l];r++;}
}
j++;
}
return list;
}
void main()
{
Set<int> t1,t2,t3;
cout<<"Init t1:";
cin>>t1;
cout<<"t1:"<<t1<<endl;
t2=t1;
cout<<"t2:"<<t2<<endl;
cout<<"t2不能和t1一样啊!要重来啊!"<<endl;
cin>>t2;
cout<<"新的t2:"<<t2<<endl;
t3=t1*t2;
cout<<"t1和t2的先前交集:"<<t3<<endl;
b=true;
t3=t1*t2;
cout<<"t1和t2的之后交集:"<<t3<<endl;
t3=t1+t2;
cout<<"t1和t2的并集:"<<t3<<endl;
}
在这里,t3=t1*t2; t3=t1+t2;总是编译不过去,请指教!!!
搜索更多相关主题的帖子: 模板 
2006-08-25 21:41
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

不說運行結果了, 說下編譯


以下是引用lw8484654在2006-8-25 21:41:11的发言:
#include<iostream>
using namespace std;
/*template<class t1,class t2>
class Pair
{
public:
Pair(int,int);
void print(int,int);
private:
t1 first;
t2 second;
};
template<class t1,class t2>
Pair<t1,t2>::Pair(int s,int j)
{
first=s;
second=j;
print(first,second);
}
template<class t1,class t2>
void Pair<t1,t2>::print(int num1,int num2)
{
cout<<"after swap number:";
int num;
num=num1;num1=num2;num2=num;
cout<<num1<<" "<<num2<<endl;
}
void main()
{
int i,j;
cout<<"Input tow number:";
cin>>i>>j;
Pair<int,int> p(i,j);
}*/

const int N=10;
static int j=0; // 全局的不需要 static
bool b=false;
template<class T>
class Set
{
public:
//friend istream& operator >>(istream&, const Set<T>&);
//friend ostream& operator <<(ostream&, const Set<T>&); // 應該定義友元

Set(); //無定義
Set<T> operator*(const Set<T>&) const; // 原來是 T
Set<T> operator+(Set<T>&); // 原來是 T
Set<T>& operator=(const Set<T>&); // 原來是 T&
int array[2*N];
};
template<class T>
istream& operator >>(istream& in,Set<T>& s)
{
for(int i=0;i<N;i++)
in>>s.array[i];
return in;
}
template<class T>
ostream& operator <<(ostream& out,Set<T>& s)
{
if(j==0)
{
for(int i=0;i<N;i++)
{
out<<s.array[i]<<" ";
}
}
else
{
for(int k=0;k<j;k++)
out<<s.array[k]<<" ";
j=0;
}
return out;
}
template<class T>
Set<T>& Set<T>::operator =(const Set<T>& s)
{
if(j!=0)
for(int k=0;k<j;k++)
array[k]=s.array[k];
for(int i=0;i<N;i++)
array[i]=s.array[i];
return *this;
}
template<class T>
Set<T> Set<T>::operator *(const Set<T>& s) const
{
Set<T> set;
int num=0;
if(b==false)
for(int i=0;i<N;i++)
{
for(int k=0;k<N;k++)
if(array[i]==s.array[k]){set.array[num++]=array[i];break;}
}
else
for(int i=0;i<N+1;i++)
{
for(int k=0;k<N+1;k++)
if(array[i]==s.array[k]){set.array[num++]=array[i];break;}
}
for(int l=0;l<num;l++)
{
for(int r=l+1;r<num;)
{
if(set.array[l]==set.array[r])
{
int t=r;
while(t<num){
set.array[t]=set.array[t+1];t++;
}
num--;
}
else {set.array[j]=set.array[l];r++;}
}
j++;
}
return set;
}
template<class T>
Set<T> Set<T>::operator +(Set<T>& s)
{
Set<T> list;
int i,k;
int num=0;
for(i=0;i<N;i++)
list.array[num++]=array[i];
for(k=0;k<N;k++)
list.array[num++]=s.array[k];
for(int l=0;l<num;l++)
{
for(int r=l+1;r<num;)
{
if(list.array[l]==list.array[r])
{
int t=r;
while(t<num){
list.array[t]=list.array[t+1];t++;
}
num--;
}
else {list.array[j]=list.array[l];r++;}
}
j++;
}
return list;
}
void main()
{
Set<int> t1,t2,t3;
cout<<"Init t1:";
cin>>t1;
cout<<"t1:"<<t1<<endl;
t2=t1;
cout<<"t2:"<<t2<<endl;
cout<<"t2不能和t1一样啊!要重来啊!"<<endl;
cin>>t2;
cout<<"新的t2:"<<t2<<endl;
t3=t1*t2;
cout<<"t1和t2的先前交集:"<<t3<<endl;
b=true;
t3=t1*t2;
cout<<"t1和t2的之后交集:"<<t3<<endl;
t3=t1+t2;
cout<<"t1和t2的并集:"<<t3<<endl;
}
在这里,t3=t1*t2; t3=t1+t2;总是编译不过去,请指教!!!


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-25 22:20
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
收藏
得分:0 
谢谢你,编译虽通过了,但是却不能运行。请指教!!!
2006-08-25 23:19
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

編譯通過不能運行? 你是指運行的結果不對嗎?
沒有細看你的程式是幹甚麽的


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-25 23:50
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
收藏
得分:0 
不是运行结果不对,是运行不了啊!
2006-08-26 08:29
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

還是未細看程式的目的, 只是將
Set 的構造函數定義好就可以運行, 結果可能不是你想要的.
你的 Set(); 只是一個空的構造函數, 我只是指出.
你改 Set();
爲 Set() {}


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-26 08:50
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
收藏
得分:0 

老兄,谢谢你,加个{}就对了!!!

2006-08-26 10:17
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

老兄, 這個詞, 不達意啊


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-26 10:27
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
收藏
得分:0 
另外我还想问下,友元不是可以访问私有变量吗?为什么我在这里把int array[2*N];设置为私有的,编译报错,说不能访问私有成员?
大哥!!!
2006-08-26 11:29
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
收藏
得分:0 
谁能帮我解释下哈?
2006-08-27 08:22
快速回复:请教模板的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047275 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved