解释为什么在使用类模板时,当我在pop()和push()方法调用期间传递 const char* 类型的参数时没有发生错误。在这些方法中,形式参数是type& ——即引用。创建函数定义时,参数类型设置为 const char*。但是 & 消失到哪里了?当我简单地指定函数模板类型 Type(意味着它将接收一个 const char* 值)时,就会发生错误。
添加。问题: 该函数模板是如何以及何时创建的?在创建类时,它是否向方法传递任何信息,例如类型?为什么如果我已经指定了类空间,还必须在pop()函数中为返回值指定模板类型。
1 个文件(标题)
#ifndef STACKTP_H_
#define STACKTP_H_
template <class Type>
class Stack {
private:
enum { MAX = 10 }; // default size
Type* items; // cодержит элементы стека
int top; // индекс вершины стека
int stacksize;
public:
explicit Stack(int ss = SIZE) { items = new Type[stacksize]; }
bool push(const Type& item); // добавляет элемент в стек
bool pop(Type& item); // выталкивает элемент с вершины стека
//方法的实现
**// почему работает при передаче аргумента const char*?**
template <class Type>
bool Stack<Type>::push(const Type& item)
{
if (top < stacksize)
{
items[top++] = item;
return true;
}
else
return false;
}
**// почему работает при передаче аргумента const char*?**
template <class Type>
bool Stack<Type>::pop(Type& item)
{
if (top > 0)
{
item = items[--top];
return true;
}
else
return false;
}
#endif
主要的
int nextin = 0;
const char* in[Num] =
{
" 1: Hank Gilgamesh", " 2: Kiki Ishar", " 3: Betty Rocker", "
4: Ian Flagranti",
" 5: Wolfgang Kibble", " 6: Portia Koop", " 7: Joy Almondo", "
8: Xaverie Paprika",
" 9: Juan Moore", " 10: Misha Mache"
};
st.push(in[nextin++]);