C++类模板的成员函数模板特殊化问题。下面是代码主要看注释的语句,特殊化能在里面单不能在外面实现。
#include<iostream.h>#include<iomanip.h>#include<stdlib.h>template<classType>classVect...
#include<iostream.h>
#include<iomanip.h>
#include<stdlib.h>
template <class Type>class Vector
{
private:
friend ostream &operator<<(ostream &,Vector <Type> &);
Type *data;
int size;
public:
Vector(int n);
~Vector();
Type operator[](const int index);
friend void display(Vector <Type> arr);
void operator=(Type value); //A:类模板的成员模板函数。
void operator=(char *s);//B:对应上一行特殊处理的成员函数。
};
template <class Type> void display(Vector <Type> arr)
{
for(int i=0;i<arr.size;i++)
cout<<arr.data[i]<<endl;
}
template <class Type> ostream &operator<<(ostream &out,Vector <Type> &arr)
{
for(int i=0;i<arr.size;i++)
out<<arr.data[i]<<endl;
return out;
}
template <class Type> Vector <Type>::Vector(int n)
{
size=n;
data=new Type[size];
if(n>0)
for(int i=0;i<n;i++)
data[i]=0;
}
template <class Type> Vector <Type>::~Vector()
{
if(data)
delete []data;
}
template <class Type> Type Vector <Type>::operator[](const int index)
{
if(index>=size||index<0)
{
cout<<"error"<<endl;
exit(1);
}
else
return data[index];
}
template <class Type> void Vector<Type>::operator=(Type value)//A对应的实现
{
for(int i=0;i<size;i++)
data[i]=value;
}
template <char*> void Vector<char*>::operator=(char* s)//B对应的实现
{
data=s;
}
void main()
{
int num;
int member;
char c;
cout<<"please input n"<<endl;
cin>>num;
Vector <int> iVector(num);
Vector <double> dVector(num);
Vector <char> cVector(num);
cin>>member;
cin>>c;
iVector=member;
dVector=member;
cVector=c;
cout.setf(ios::showpoint);
cout<<"iVector"<<endl<<iVector<<"dVector"<<endl<<dVector<<"cVector"<<endl<<cVector<<endl;
} 展开
#include<iomanip.h>
#include<stdlib.h>
template <class Type>class Vector
{
private:
friend ostream &operator<<(ostream &,Vector <Type> &);
Type *data;
int size;
public:
Vector(int n);
~Vector();
Type operator[](const int index);
friend void display(Vector <Type> arr);
void operator=(Type value); //A:类模板的成员模板函数。
void operator=(char *s);//B:对应上一行特殊处理的成员函数。
};
template <class Type> void display(Vector <Type> arr)
{
for(int i=0;i<arr.size;i++)
cout<<arr.data[i]<<endl;
}
template <class Type> ostream &operator<<(ostream &out,Vector <Type> &arr)
{
for(int i=0;i<arr.size;i++)
out<<arr.data[i]<<endl;
return out;
}
template <class Type> Vector <Type>::Vector(int n)
{
size=n;
data=new Type[size];
if(n>0)
for(int i=0;i<n;i++)
data[i]=0;
}
template <class Type> Vector <Type>::~Vector()
{
if(data)
delete []data;
}
template <class Type> Type Vector <Type>::operator[](const int index)
{
if(index>=size||index<0)
{
cout<<"error"<<endl;
exit(1);
}
else
return data[index];
}
template <class Type> void Vector<Type>::operator=(Type value)//A对应的实现
{
for(int i=0;i<size;i++)
data[i]=value;
}
template <char*> void Vector<char*>::operator=(char* s)//B对应的实现
{
data=s;
}
void main()
{
int num;
int member;
char c;
cout<<"please input n"<<endl;
cin>>num;
Vector <int> iVector(num);
Vector <double> dVector(num);
Vector <char> cVector(num);
cin>>member;
cin>>c;
iVector=member;
dVector=member;
cVector=c;
cout.setf(ios::showpoint);
cout<<"iVector"<<endl<<iVector<<"dVector"<<endl<<dVector<<"cVector"<<endl<<cVector<<endl;
} 展开
1个回答
展开全部
楼主各种概念混淆!
看楼主的意图是想以char*类型实例化模板的时候调用不同的函数,那么:
1 去掉B的声明
2 实现
template<>
void Vector<char*>::operator(char* s)
{
...
}
这样叫做特化。
至于你在类里面实现的,那就是函数重载了,两码事。
如果你想在外面实现重载应该这么写:
template<class Type>
void Vector<Type>::operator(char* s)
{
...
}
总之,可以看出楼主因为对重载和特化的理解不够,导致想法和行为很矛盾
看楼主的意图是想以char*类型实例化模板的时候调用不同的函数,那么:
1 去掉B的声明
2 实现
template<>
void Vector<char*>::operator(char* s)
{
...
}
这样叫做特化。
至于你在类里面实现的,那就是函数重载了,两码事。
如果你想在外面实现重载应该这么写:
template<class Type>
void Vector<Type>::operator(char* s)
{
...
}
总之,可以看出楼主因为对重载和特化的理解不够,导致想法和行为很矛盾
追问
额。😰我试试。我自学的。不太会。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询