64,637
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using namespace std;
class date //创建一个类
{
int month,day,year;
public:
date(int m=0,int d=0,int y=0)
{
month=m;
day=d;
year=y;
}
friend ostream& operator<<(ostream& os,const date t) //重载<<
{
cout<<t.month<<' '<<t.day<<' '<<t.year<<endl;
return os;
}
};
template<class T> //创建一个类模板
class set
{
T t;
public:
set(T st):t(st) {} //标记为疑问2
void display();
};
template<class T>
void set<T>::display()
{
cout<<t<<endl;
}
template<>
void set<date>::display() //这里出错,但不知道如何解决。我想实现当类模板的的参数是一个类的时候,display执行这个函数
{
cout<<"date:"<<t<<endl;
}
int main()
{
set<int> inset(123);
set<date> dt=date(1,2,3);
inset.display();
dt.display();
return 0;
}
template<> int set<date>::display()
则是对模板类的成员函数的特化,但返回值类型与模板不匹配,这是不允许的。
如果你需要修改 set<date> 的行为,那么应该特化模板类 set<T>
template <class T> class set { T display(); }; //声明
template<> class set<date> { int display(); }; //特化