. 简答题
以下是一个整数栈类的定义,将其改写成类模板:
(正文打不出来,只好用图片替代)
. 简答题
以下是一个整数栈类的定义,将其改写成类模板:
参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。
将给定的整数栈类改写为类模板,意味着我们需要使这个栈类能够处理任何类型的数据,而不仅仅是整数。这可以通过在类定义前添加模板参数 <typename T>
来实现,这样类型 T
就可以代表任何数据类型。下面是改写后的代码:
template <typename T>
class Stack {
public:
Stack() : tos(0) {} // 构造函数
~Stack() {} // 析构函数
void Push(const T& value); // 在栈的末尾加入一个新元素
T Pop(); // 删除栈的末尾元素并返回它的值
private:
T stack[100]; // 用来存放栈元素的数组
int tos; // 目前栈中的元素个数
};
// 实现 Push 方法
template <typename T>
void Stack<T>::Push(const T& value) {
if (tos < 100) {
stack[tos++] = value;
} else {
throw std::overflow_error("Stack overflow");
}
}
// 实现 Pop 方法
template <typename T>
T Stack<T>::Pop() {
if (tos > 0) {
return stack[--tos];
} else {
throw std::underflow_error("Stack underflow");
}
}
这段代码中,<typename T>
表示泛型类型参数,使得 Stack
类可以处理任何类型的元素(如 int
, double
, std::string
等)。同时,我在 Push
和 Pop
方法的实现中加入了基本的错误检查,以防止栈溢出或下溢。这样,您就可以创建任意类型的栈实例了。