几个函数问题请进详解

1、TElemelemBuffTElem&Func(void){elemBuff=K;//K为一外部数据returnelemBuff;}Func()=xx与elemBuf... 1、TElem elemBuff
TElem& Func(void)
{
elemBuff=K;//K为一外部数据
return elemBuff;
}
Func() = xx与elemBuf = xx有什么不同?
如果是下面这种该怎么处理
TElem& Func(TElem &elem)
{
TElem *pNode=elem;
return *pNode;
}

2、能不能举一个非用指针不可的例子?

3、int k=0;
TElem& Func(void)
{
k++;
return room[k];
}//这里为什么强调要保存返回引用的值,否则下次Func会破坏上次的值,我感觉变化的只是k
3 中room是外部的一个空间 其他的内容就是这些了 他的意思是要把func的返回值保存 否则下次func会破坏上次的返回值(因为是引用 所以应该就是指原值)类似的也有一段代码
TElem& func(void)
{
TElem *p;
*p=room[k];
elemBuff=*p;
delete p;
return elemBuff;//在下次调用该函数前要将返回值复制(书中的原文)
}k是外部一个int型 room是外部一个存储空间
展开
 我来答
百度网友ee29dbc0b
2007-02-18 · TA获得超过9805个赞
知道大有可为答主
回答量:1907
采纳率:80%
帮助的人:1086万
展开全部
1、好像没多大区别,类似的写法对数据封装有用,不过这段代码总用全局变量,本身是破坏数据封装的。

2、如,命令行程序的命令行参数是char *argv[],本身就是字符指针,不可能只用string类解决。不过上面举的例子不是最重要的,一般就是在对时间或空间效率有特殊要求的低层操作中,或者是为了自己实现一种特殊的数据结构时,尤其是要自己对内存分配进行处理时,就必须用指针;不过一般的C++应用则还是最好避免指针(考虑更用地用STL),以保证安全高效。

3、如果不是返回引用,那么返回的是指针还是返回新的对象?还有不明白room是不是外部数组。如果返回的指针,自然,语法上不一样,不过作用与返回引用一致;如果返回的是新的对象(room[k]的复本),那么新对象不影响room[k]的内容。
根据你给补允的代码,其中说“在下次调用该函数前要将返回值复制”,应该指的是在外部room[k]的内容可能被改变,从而影响到后来对func返回值的使用。
不过你原来3中的Func函数仍不知道是什么意思。因为返回引用才更可能被外部修改,返回复本才不会,疑心是书上写反了。

另外,你补充给的代码是有错误的。代码中p是一个func中的局部auto型对象,一般是分配栈空间中,不能用delete运算符删除(它会在函数结束后自动删除)。delete只能与new成对地出现,因而这样的代码一定会出错。
为此,我专门写了一段测试代码:
#include <iostream>
#include <cstdlib>

using namespace std;

class T {
public:
T(int in = 0) : i(in) {/* null */} //构造函数
int i;
};

T buf;
T room[10];
int k = 0;

T& foo()
{
T* p;
*p = room[k];
buf = *p; //在这句调用默认构造函数
delete p; //错误!在调用foo()时会发生运行时错误。
return buf;
}

int main()
{
foo();
system("pause");
return 0;
}
newghost_joe
2007-02-19 · TA获得超过791个赞
知道小有建树答主
回答量:1915
采纳率:0%
帮助的人:1135万
展开全部
....
TElem *p;
*p=room[k];
elemBuff=*p;
delete p;
....

我就不说什么了,咱不看这种书行么....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式