【发布时间】:2016-05-28 23:03:56
【问题描述】:
我正在尝试编写一个通用类MyStack 来实现一个堆栈。我的类中有一个模板变量,类型名称为Data。我还重载了= operator 以将现有的MyStack 对象复制到另一个现有的MyStack 对象。因此,我想在复制之前检查两个类对象是否具有相同类型的变量,即,我不希望将float 类型的对象复制到int 类型的对象。完成这项任务的好方法是什么?
MyStack 定义:
template<typename Data>
class MyStack
{
Data *data;
int pos;
int Max;
MyStack();
public:
MyStack(int);
int push(const Data);
int push(const Data *,const Data);
Data pop();
Data* pop(const int);
int getMaxSize();
int currSize();
int isEmpty();
void display();
MyStack(const MyStack &);
void operator=(const MyStack s);
~MyStack();
};
这是运算符重载部分:
template<typename Data>
void MyStack<Data>::operator=(const MyStack s)
{
cout<<"Copied with operator overloading"<<endl;
delete[] data;
data=new Data[s.Max];
Max=s.Max;
pos=s.pos;
for(int i=0;i<=s.pos;i++)
data[i]=s.data[i];
}
提前致谢。
【问题讨论】:
-
您不能拥有
MyStack对象,因为MyStack是模板,而不是类型。这可能是你困惑的根源。 -
您无需执行任何操作。编译器会帮你检查。
-
不相关:查找'c++ self-assignment'。
标签: c++ templates overloading