J.R*_*Roe 1 c++ templates class
给出这个示例类模板:
\n\ntemplate<typename T>\nclass Stack {\n T * data;\n int size;\n int nextIndex;\npublic:\n Stack(int size = 100);\n Stack(const Stack& stack);\n ~Stack();\n Stack& operator=(const Stack& s);\n void push(const T& t);\n void pop();\n T& top();\n const T& top() const;\n int getSize() const;\n\n class Full {\n };\n class Empty {\n };\n};\n\ntemplate<typename T>\nvoid Stack::push(const T& t) {\n if (nextIndex >= size) {\n throw Full();\n }\n data[nextIndex++] = t;\n}\n\xc2\xa0\ntemplate<typename T>\nvoid Stack::pop() {\n if (nextIndex <= 0) {\n throw Empty();\n }\n nextIndex--;\n} \nRun Code Online (Sandbox Code Playgroud)\n\npush和方法的实现部分可以吗pop?
我不明白我是否需要写void Stack<T>::push(const T& t)代替void Stack::push(const T& t)(并且方法相同pop)。
注意:Eclipse(根据 C++11)给出了下一个错误:
\n\n\n\n\n未找到会员声明
\n
因为这些行:
\n\nvoid Stack::push(const T& t) { \nvoid Stack::pop() {\nRun Code Online (Sandbox Code Playgroud)\n
Push方法和pop方法的实现部分可以吗?我不明白是否需要编写 void Stack::push(const T& t) 而不是 void Stack::push(const T& t) (对于 pop 方法也是如此)。
你需要使用
template <typename T>
void Stack<T>::push(const T& t) { ... }
template <typename T>
void Stack<T>::pop() { ... }
Run Code Online (Sandbox Code Playgroud)
当用作类型名时,该名称与类模板定义中的名称Stack相同。Stack<T>在类模板定义之外,您必须显式提供模板参数。
| 归档时间: |
|
| 查看次数: |
646 次 |
| 最近记录: |