首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

初学模板,新有关问题。

2012-02-29 
初学模板,新问题。。谢谢大家的解答,觉得 yanhailiangyhl 说的很对,如何在所有的接口里不要出现Node,包括返

初学模板,新问题。。
谢谢大家的解答,
觉得 yanhailiangyhl 说的很对,

如何在 所有的接口里不要出现Node,包括返回值和参数 

谁能把这个例子改写的更通用一点!谢谢,学习一下

原帖:
http://topic.csdn.net/u/20071012/10/3679cedb-747c-483a-b5e7-14f872808fb4.html
 

[解决办法]
我在原贴改写了两个函数,顺便贴过来,一开始也可以想明白,现在觉得是要封装的严格一些好,才能保证栈本身的正确性
template <class T >
void CLinkStack <T >::Push(T x)
{
assert(top); 
Node* pNode = new Node; 
pNode- >data = x;
p- >next = *top; 
*top = p; 


template <class T >
T* CLinkStack <T >::Pop(void)
{
assert(top); 
T *x = new NULL; 
if(!IsEmpty())

Node * p = *top; 
top = *top- >next;
x = new T(p- >data); 
delete p; 

return x; 


我修改两个函数 
关于push 入栈: 
客户调用该函数直接给元素就可以了,不必自己再new出一个Node了 
关于Pop出栈; 
直接返回指向顶元素值的指针。注意这个指针指向的地址空间是再函数里面New出来的,需要在客户端负责释放,所以,这也不是最好办法。应该返回T对象最好,这样就安全了。但是需要处理当前栈为空的情况。即需要栈为空时抛异常出来,而不返回任何T对象。 
总之,这样要比把top节点直接返回安全多了,按照楼主原来的pop函数return的结节p,p- >nest是指向pop后的top节点的。那么客户就可以直接用这个节点来任意修改栈了,这样,这个栈就一点封装性都没有了,这样是很不安全的做法。

热点排行