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

请问下c++primer里一个例子

2012-03-08 
请教下c++primer里一个例子#ifndef STACK_H_#define STACK_H_typedef unsigned long Itemclass Stack{pri

请教下c++primer里一个例子
#ifndef STACK_H_
#define STACK_H_

typedef unsigned long Item;

class Stack{
private:
enum {MAX = 10};
Item items[MAX];
int top;
public:
Stack();
bool isempty() const;
bool isfull() const;
bool push(const Item &item);
bool pop(Item &item);
};

#endif
这里面bool push(const Item &item)是不是可以改成bool push(const Item item)这样。
书上为什么要这样写?

[解决办法]
上面使用typedef unsigned long Item;
就说明了一种情况,Item的类型是可以通过修改这个typedef来完成的
所以,Item的类型可以使基本类型,也可以是较复杂的数据类型,所以,在设计成员函数时,要考虑到会不会产生实参到形参的拷贝构造
[解决办法]
常引用不用申请对象,只是对象的别名,从空间和时间上都更高效。
即空间上只是形参item只是实参的别名,没有创建对象,更节省空间。
时间上在调用时不用调用Item的拷贝构造函数,效率更高。
[解决办法]
bool push(const Item &item);
Item a;----------------1
push(a);---------------2
2的a传递的是引用,两个a指示的是同一个内存空间的值


bool push(const Item item);
Item a;----------------1
push(a);---------------2

1到2,会复制零时变量,1 的 a 和 2 的 a不是同一个内存空间的值了

热点排行